这有效:
#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::function<> 作为模板非类型参数:
#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 >();
}
那么如何创建一个能够接受 lambda 封装作为模板非类型参数的模板类呢?