我有这个typedef函数指针 plot :
typedef void(*plot)();
如何将泛型参数传递给它(像这样):
template<typename T>
typedef void(*plot)(T);
然后,我怎样才能将N个泛型参数传递给它?
template<typename T>
typedef void(*plot)(T ...);
答案 0 :(得分:1)
在C ++ 11中,你可以做这样的事情
template<typename T>
using fun_ptr = void (*)(T);
对于第二种情况,
template<typename... T>
using fun_ptr = void (*)(T ...);
答案 1 :(得分:0)
可以使用Variadic Templates和Type Aliases的组合,如下所示:
template<typename... T>
using ptr = void (*)(T ...);
示例:
template<typename... T>
using ptr = void (*)(T ...);
void f(int n, string s, float x)
{
cout << n << s << x;
}
int main(int argc, char **argv)
{
ptr<int, string, float> x; // Arbitrary number of template arguments of arbitrary types.
x = f;
x(7, " nasty function pointer ", 3.4);
return 0;
}
观察:如果在typename之后省略省略号,则如下:
template<typename T>
using ptr = void (*)(T ...);
编译器引发错误数量的模板参数(3,应为1)&#34;错误,考虑到前面提到的例子。