有没有一种方法可以在不捕获lambda变量的情况下编写更短的内容

时间:2018-02-12 07:45:57

标签: c++ lambda global capture

我不确定是否有其他任何人在使用多行代码时使用较短的名称制作临时名称,例如,您需要访问几个类的内容,而不是链接成员访问运算符你一遍又一遍地使用一个较短的命名临时。我尝试过做类似以下的事情:

struct Car
{
    struct
    {
        struct
        {
            int height, width, depth;
        } physicalInfo;
    } information;
} objectWithARatherLongName ;

int main()
{
    auto lambda1 = [] { return objectWithARatherLongName.information.physicalInfo.height; };

    // Create a temporary for a shorter name
    auto& dimens = objectWithARatherLongName.information.physicalInfo;

    auto lambda2 = [=] { return dimens.height; };
    // Have to capture "dimens" because it's a local variable
    // And over and over again, the shorter way is preferred.
}

在这种情况下,自动尺寸是短暂的命名临时,但由于我想在lambda中使用它我需要捕获它,这让我认为我应该只使用全局的全名。有没有办法以我描述的方式缩短这个但仍然使用全局变量?我想过一个只能使用类型的typedef吗?不是实际的对象。

1 个答案:

答案 0 :(得分:0)

不要使用全局变量,但如果必须,您可能还可以添加一个:

struct Car
{
    ...
} objectWithARatherLongName ;
auto& dimens = objectWithARatherLongName.information.physicalInfo;

int main() { // ...