有关隐式lambda转换的问题。我有这种类型:
class A {
public:
A(std::function<void(std::string)> func) {
....
}
};
我相信其中有一个有效的副本构造函数。
我想执行以下操作
A a = [](std::string param) { ... };
或
void MyFunc(A a) { ... } // definition
MyFunc([](std::string param) { ... }); // call
但是这两个都会产生编译错误:
注意:候选构造函数不可行:第一个参数没有从'(lambda at ....)'到'std :: function'的已知转换
这是为什么?还是应该这样?
答案 0 :(得分:8)
您的问题是只允许一个用户转换,而您需要两个:
std::function
-> A
。两者
A a{[](std::string) {}};
MyFunc({[](std::string) {}});
工作。