相关疑难解决方法(0)

这个元组创作成语有没有名字?

Boost邮件列表中,@ LouisDionne最近发布了以下创建类似元组的实体的巧妙技巧:

#include <iostream>

auto list = [](auto ...xs) { 
    return [=](auto access) { return access(xs...); }; 
}; 

auto length = [](auto xs) { 
    return xs([](auto ...z) { return sizeof...(z); }); 
};

int main()
{
    std::cout << length(list(1, '2', "3")); // 3    
}
Run Code Online (Sandbox Code Playgroud)

实例.

聪明之处在于listlambda采用可变参数列表作为输入,并返回lambda作为输出,将另一个lambda作用于其输入.类似地,lengthlambda是一个类似列表的实体,它将sizeof...向列表的原始输入参数提供可变参数运算符.在sizeof...操作上缠绕有拉姆达的内部,使得它可以被传递给list.

问题:这个元组创作成语是否有名称?也许来自函数式编程语言,其中更常用的是高阶函数.

c++ tuples variadic-templates generic-lambda c++14

62
推荐指数
2
解决办法
4954
查看次数

lambda中使用的"auto"变量在自己的初始值设定项中

今天我发现了这段代码

#include <cstdio>

auto terminal = [](auto term)           
{                                       
    return [=] (auto func)             
    {                                   
        return terminal(func(term));
    };
};
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,GCC接受了它.Clang拒绝它,因为它terminal在自己的初始化器中使用并被声明auto.

我期待clang给出的错误,但它实际上是不正确的吗?或者必须接受代码?

c++ lambda auto c++14

35
推荐指数
1
解决办法
1613
查看次数

什么是这个C++ 14结构被称为链接lambdas?

这是关于这一点的后续问题:C++ 14中的Lambda-Over-Lambda,答案解释了代码.

它是关于lambda创建另一个lambda,在调用时,调用传递的lambda并将返回值传递给原始lambda,从而返回第二个lambda的新实例.

该示例显示了lambdas可以链接的方式.

复制原始问题:

#include <cstdio>

auto terminal = [](auto term)            // <---------+  
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >---------+
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

是否已经有了这个结构的名称,如果不是,它应该被称为什么?它是否类似于其他语言的结构?

备注:我对它是否真的有用并不感兴趣.

c++ lambda c++14

11
推荐指数
1
解决办法
734
查看次数

标签 统计

c++ ×3

c++14 ×3

lambda ×2

auto ×1

generic-lambda ×1

tuples ×1

variadic-templates ×1