代码之家  ›  专栏  ›  技术社区  ›  Ammar Husain

通用lambdas和一元+运算符

  •  0
  • Ammar Husain  · 技术社区  · 5 年前

    据我所知 + 运算符,然后lambda表达式将其解析为函数指针重载。( Post )

    然而,我不太明白为什么它不适用于通用lambdas。例如:

    auto foo = +[](int a) { std::cout << "foo " << a << std::endl; };  // Valid
    
    auto bar = +[](auto a) { std::cout << "bar " << a << std::endl; }; // Fails 
    
    // compiler error: 
    // no match for ‘operator+’ (operand type is ‘main()::<lambda(auto:1)>’)
    

    这背后的直觉是什么?

    Live example

    0 回复  |  直到 5 年前
        1
  •  0
  •   TemaTre    5 年前

    所以,问题在于(自动a)。如果你没有lamdas会是什么样子?

    那么你应该写一个方法

    void FuncFirst(int a) { std::cout << "foo " << a << std::endl; }
    

    然后使用

    auto foo = $FuncFirst;
    

    所以,第二个例子似乎很奇怪:

    void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So, how parameter can be "auto"? 
    

    “自动”应该在编译期间解决。 如果您将它发送到其他一些方法,并使用不同的参数元组调用它,会怎么样?它有太多的不确定性。 如果你想创建一个可以接受不同参数的方法,你可以使用不同的模板。(或者可以使用int?=)