我想知道下面给出的 lambda 的正确类型定义是什么,以便以下代码将使用符合 c++11 的编译器进行编译:
#include <cstdio>
#include <string>
template<class Func>
class foo
{
public:
foo(Func func)
: fum(func){}
Func fum;
};
int main()
{
foo<???> fi([](int i) -> bool { printf("%d",i); return true; });
fi.fum(2);
return 0;
}
我想另一种方法可以这样做:
template<typename Func>
foo<Func> make_foo(Func f)
{
return foo<Func>(f);
}
int main()
{
auto fi = make([](int i) -> bool { printf("%d",i); return true; });
fi.fum(2);
return 0;
}
It's auto
+ decltype
:
auto l = [](int i) -> bool { printf("%d",i); return true; };
foo<decltype(l)> fi(l);
fi.fum();
每个 lambda 都有不同的、唯一的、未命名的类型。作为一名编码员,你只需can not命名它。
但是,在您的情况下,由于 lambda 不捕获任何内容(空[]
),它可以隐式转换为函数指针,因此可以这样做:
foo<bool(*)(int)> fi([](int i) -> bool { printf("%d",i); return true; });
fi.fum();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)