[英]C++ distinguish Functor and Value template argument
一般来说,我在理解仿函数方面遇到了一些麻烦,因为我对模板编程很新。
我在这里要完成的是以下内容,我正在尝试使用一个函数来获取一个Functor和一个带有值的重载函数。
理想情况下:
template<typename ValueType>
int function(ValueType v)
{
v + 1;
...
}
template<typename Functor>
int function(Functor f)
{
f();
...
}
我可以通过将std :: function作为参数来获得性能,但我特别希望能够将lambda作为参数。
编辑
我想要实现的是允许我正构建的构造在必要时进行惰性求值:
construct.option(1)
construct.option([](){ return 5;})
construct.value()
使用构造选择在调用选项时获取哪个参数的值。 (可能有一个额外的参数来确定是否选择了该选项)
要明确的是,只要完成此选项调用,它就会知道是否评估表达式。
此外,如果参数重载了()运算符,我想调用它,无论它是否也重载+ 1。
是的,你可以使用SFINAE做到这一点:
// overload taking functor f(int)
template<typename Func>
std::result_of_t<Func(int)> // or std::invoke_result_t<> (C++17)
function(Func const&func)
{
return func(0);
}
// overload taking value of builtin arithmetic type
template<typename ValueType>
enable_if_t<std::is_arithmetic<ValueType>::value, ValueType>
function(Value const&val)
{
return val;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.