假设我有一个函数要传递给窗体的另一个函数。如何确保模板函数的参数与另一个参数的参数匹配
auto f = [](double x) -> double {
// ...
return 2.0;
};
或这种形式:
double f(double x) {
// ...
return 2.0;
};
我希望有一个模板函数取女,与将用于调用F的另一个理由。
类似:
template <typename F, typename T>
T use_function(F func, T t)
{
return func(t);
};
但我要强制执行T具有相同类型为f的返回类型。我的主要问题是,当我打电话使用功能,像这样:
use_function(f, 5);
T的类型变成一个int。而我正在做数学的东西,这给我错误的答案,使用整数。所以,一个解决办法是执行浮点类型莫名其妙......
我想用这个作为一个解决方案:
template <typename F, typename T>
auto use_function(F func, T temp) -> decltype(func(temp))
{
decltype(func(temp)) t = temp; // This will convert to double if temp was an int....
}
,你怎么看待这个问题?
充分暴露于C++ 17,充分利用'auto'关键字。所有你需要做的是:'template auto use_function(F func,T t) { return func(t); }'。即使'T'是'int',如果'func'返回一个'double',这就是你会得到的。 –
为了确保它,我经常在一个'std :: function'对象中包含仿函数。如果有任何不匹配,它应该给编译时错误。 – Vivick
@Vivick你可以输入一个简单的例子。不知道你的意思 – CptLightning