mak*_*mak 5 c++ lambda functor c++14
如何更改下面的函子以用作 lambda 包装器?
template<typename T>
class F {
T f;
public:
F(T t){
f = t;
}
T& operator()(){
return f;
}
};
int main()
{
int x = 5;
F<int (*)(int, int)> f( [x](int a, int b){return a+b;} );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器说
error: no matching function for call to 'F<int (*)(int, int)>::F(main()::<lambda(int, int)>)'
F<int (*)(int, int)> f( [x](int a, int b){return a+b;} );
Run Code Online (Sandbox Code Playgroud)
如果 lambda 仅仅因为它们是两个不同的东西而捕获某些东西,则它不能直接转换为自由函数指针。
具有捕获值的 lambda 必须将其状态保存在某处,但函数指针只是一个内存地址,因此它不提供该功能。所以你会被允许做某事
static_cast<int(*)(int,int)>([](int a, int b) { return a+b; })
Run Code Online (Sandbox Code Playgroud)
但这不是你的情况。
一些解决方案可能是:
std::function<int(int,int>)
代替 归档时间: |
|
查看次数: |
4713 次 |
最近记录: |