#include <functional>
template < bool (*F)(int) > class Foo {};
bool fooFunc(int n) { return true; }
int main(int argc, char* argv[])
{
auto a = Foo<fooFunc>();
}
但这不起作用,因为你不能在lambda转换为一个函数指针:
#include <functional>
template < bool (*F)(int) > class Foo {};
auto barFunc = [] (int n) -> bool { return true; };
int main(int argc, char* argv[])
{
auto a = Foo<barFunc>();
}
这不工作,因为你不能用std ::功能<>作为模板非类型参数:
#include <functional>
template < std::function< bool(int) > F > class Bar {};
auto barFunc = [] (int n) -> bool { return true; };
int main(int argc, char* argv[])
{
auto b = Bar<barFunc>();
}
所以,我该怎么办CREA是否能够接受lambda外壳作为模板非类型参数的模板类?
注意你的意思是非模板参数。你的意思不是简单地把'模板'?是否因为这样做会放宽模板参数要求以满足您的需求? –
OlivierD
2013-04-23 21:41:29
他意味着一个**值**(与类型相反)模板参数,例如:'template' –
2013-04-23 21:41:50
我认为您正在编译时尝试做某些事情,在一般情况下无法完成,直到运行这是为什么“你不能使用std :: function <>作为模板非类型参数” – antlersoft 2013-04-23 21:52:03