![](/img/trans.png)
[英]Template parameters of function type with auto return type arguments of previous template parameter types
[英]How can I separate function type return type and arguments in template parameter
我想将 function 类型(例如int(float)
)传递给 class 模板,该模板将返回类型与变量 arguments 列表分开:
template<typename R, typename... Args>
class CallFunction
{
public:
R operator()(Args&&... args)
{
std::cout << ("" << ... << (args << "\n"));
return R{100};
}
};
int main()
{
CallFunction<int(float)> cf;
std::cout << "return value: " << cf(200.f) << "\n";
}
我意识到上面的代码不起作用。 在这种情况下, R
等于int(float)
而不是我期望的int
。 这是现场样品。
我以前见过这样的模板诡计,它实际上以某种方式起作用。 我已经在 SO 上看到了很多关于如何执行此操作的答案,但它需要一个有效的 function 指针。 在这里,我直接指定 function 类型,因此decltype
解决方案似乎不适用于这里。
我怎样才能做到这一点? 我的解决方案最多可以使用 C++17。
int(float)
是单一类型(具体来说,是 function 类型),因此您的模板只需采用一种类型。 但是您可以使用部分特化来推导返回类型和参数类型。
template <typename>
class CallFunction; // This primary template is not defined.
template <typename R, typename... Args>
class CallFunction<R(Args...)>
{
public:
R operator()(Args&&... args)
{
std::cout << ("" << ... << (args << "\n"));
return R{100};
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.