Это работает:C++ шаблон не типа аргумент функции лямбда
#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>();
}
и это не работает, потому что вы не можете использовать зЬй :: функцию <> в качестве параметра шаблона не типа:
#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>();
}
так как I Crea te класс шаблона, который может принять лямбда-корпус в качестве параметра шаблона шаблона?
Обратите внимание, что вы подразумеваете под параметром шаблона не-типа. Вы имеете в виду не просто размещение шаблона '? Не потому ли, что это слишком сильно смягчает требования к параметрам шаблона для ваших нужд? –
OlivierD
Он означает параметр ** ** ** (в отличие от типа), например: 'template' –
Я думаю, что вы пытаетесь что-то сделать во время компиляции, которое невозможно сделать в общем случае до запуска , поэтому «вы не можете использовать std :: function <> как параметр непигового шаблона» – antlersoft