我希望能够调用具有函数类型(包括参数和返回类型)的模板参数的函数,即double(int, long)
,并在函数中分离类型并单独使用它们。
例如我希望能够调用一个函数
printRes<double(int, long)>();
上面的这个函数应该解析模板参数并提取返回类型double
并输出它。
我知道如何使用类和可变参数模板来做到这一点:
#include <iostream>
#include <typeinfo>
template <typename T>
class A {};
template <typename Res, typename... Args>
class A<Res (Args...)> { // Parse template argument
public:
void printRes() {
std::cout << typeid(Res).name() << std::endl;
}
};
然后我可以像这样使用它:
int main() {
A<double(int, long)> a;
a.printRes();
}
哪个输出:
d
我想改用一个简单的函数来做到这一点。这就是我想出的:
template <typename Res, typename... Args>
void printRes() {
std::cout << typeid(Res).name() << std::endl;
}
但是,现在我必须指定这样的模板参数:
int main() {
printRes<double, int, long>();
}
有什么方法可以实现该函数,以便可以使用与类版本(即)相同的模板参数来调用它double(int, long)
?