C++ 通用lambdas和一元+;操作人员

C++ 通用lambdas和一元+;操作人员,c++,lambda,c++14,generic-lambda,C++,Lambda,C++14,Generic Lambda,据我所知,lambda表达式之前的+运算符将其解析为函数指针重载。() 但是,我不太明白为什么它不能与通用lambdas一起工作。例如: auto foo = +[](int a) { std::cout << "foo " << a << std::endl; }; // Valid auto bar = +[](auto a) { std::cout << "bar " << a << std::endl; }; /

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

但是,我不太明白为什么它不能与通用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)>’)
auto-foo=+[](inta){std::cout所以,问题出在(auto-a)。如果没有lamdas,它会是什么样子

那么你应该写一个方法

void FuncFirst(int a) { std::cout << "foo " << a << std::endl; }
所以,第二个例子似乎很奇怪:

void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So, how parameter can be "auto"? 
void FuncSecond(auto a){std::cout所以,问题出在(auto a)。如果没有lamdas,它会是什么样子

那么你应该写一个方法

void FuncFirst(int a) { std::cout << "foo " << a << std::endl; }
所以,第二个例子似乎很奇怪:

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

void FuncSecond(auto a){std::cout您只能获取指向函数的指针,但泛型lambda本质上是一个模板。但是,您可以通过强制转换获取指向该模板特定实例化的指针,例如
auto bar=static_cast([](auto a){std::cout@HenriMenke-IMHO,您应该在回答中展开注释。您只能获取指向函数的指针,但通用lambda本质上是一个模板。但是,您可以通过强制转换获取指向该模板特定实例化的指针,例如
auto bar=static_cast([](auto a){std::cout@HenriMenke-IMHO,你应该在回答中扩展你的评论。