如何将N个泛型参数传递给typedef函数指针?

时间:2015-06-15 00:24:42

标签: c++ generics typedef

我有这个typedef函数指针 plot

typedef void(*plot)();

如何将泛型参数传递给它(像这样):

template<typename T>
typedef void(*plot)(T);

然后,我怎样才能将N个泛型参数传递给它?

template<typename T>
typedef void(*plot)(T ...);

2 个答案:

答案 0 :(得分:1)

在C ++ 11中,你可以做这样的事情

template<typename T>
using fun_ptr = void (*)(T);

对于第二种情况,

template<typename... T>
using fun_ptr = void (*)(T ...);

答案 1 :(得分:0)

可以使用Variadic TemplatesType 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;错误,考虑到前面提到的例子。