提取函数指针参数和返回类型

时间:2013-11-23 23:09:13

标签: c++ templates

我正试图找到一种方法来提取参数的类型和数量,并返回类型函数指针,这样我就可以这样编写:

int foo(int x, int y)
{
    return x+y;
}

template<class T, class U>
U callfunc(T, ...);

int main()
{
    int k = callfunc(&foo, 3, 5);
}

callfunc将检查参数的数量和类型是否正确并返回结果。但是应该如何实施?

我已经搜索了一些内容,发现一些文章使用宏和模板来涵盖类似的主题,但仍然无法做到。

有人可以提供一些指示吗?

谢谢!

P.S:我不能使用可变参数模板,因为VS2012不支持它。

1 个答案:

答案 0 :(得分:2)

您需要一些可变参数模板,例如:

template<typename TResult, typename ...TArgs>
TResult callfunc(TResult (*fn)(TArgs...), TArgs... args)
{
   /* do something with the args, if you wanted */
   TResult result = fn(std::forward(args)...);
   /* do something to the return value, if you wanted */
   return std::forward(result);
}