如何使用参数包参数键入函数指针类型

时间:2016-11-29 00:24:03

标签: c++ c++11 templates function-pointers variadic-templates

将参数包打包成函数指针的语法是什么?

我希望能够键入一个函数指针,但是当我做这样的事情时,编译器会抱怨

template< class ...Args >
struct method { typedef typename void(*type)(void*, Args...); };

带有error: expected nested-name-specifier before 'void'

行的消息

2 个答案:

答案 0 :(得分:2)

没有typename它可以正常工作。 http://coliru.stacked-crooked.com/a/64b3fbec9276dd70

您不应在此处使用typename,因为没有嵌套名称说明符

答案 1 :(得分:1)

我认为您应该从typename

中删除typedef
template <typename ... Args>
struct method
 { typedef void(*type)(void*, Args...); };

另一个解决方案可能是使用using代替typedef(恕我直言会更清晰)

template <typename ... Args>
struct method
 { using type = void(*)(void*, Args...); };