これは機能します:
#include <functional>
template < bool (*F)( int ) > class Foo {};
bool fooFunc( int n ) { return true; }
int main( int argc, char* argv[] )
{
auto a = Foo< fooFunc >();
}
ただし、ラムダを関数ポインターに変換できないため、これは機能しません。
#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 >();
}
では、テンプレートの非型パラメータとしてラムダ エンクロージャを受け入れることができるテンプレート クラスを作成するにはどうすればよいでしょうか。