如何将函数指针编写为模板?
template <typename T>
T (*PtrToFunction)(T a);
答案 0 :(得分:8)
我假设您正在尝试声明一个类型(如果没有具体类型,则无法声明“模板变量”)。
C ++ 03没有模板typedef,您需要使用struct作为解决方法:
template <typename T>
struct FuncPtr {
typedef T (*Type)(T a);
};
...
// Use template directly
FuncPtr<int>::Type intf;
// Hide behind a typedef
typedef FuncPtr<double>::Type DoubleFn;
DoubleFn doublef;
C ++ 11模板别名将消除struct变通方法,但目前除了Clang之外没有其他编译器能够实现这一点。
template <typename T>
typedef T (*FuncPtr)(T a);
// Use template directly
FuncPtr<int> intf;
// Hide behind a typedef
typedef FuncPtr<double> DoubleFn;
DoubleFn doublef;
答案 1 :(得分:5)
如果您的意思是为该功能创建一个类型,您可以这样做:
template<typename T>
struct Function {
typedef T (*Ptr)(T);
};
然后像
一样使用它int blah(Function<int>::Ptr a) { }
答案 2 :(得分:0)
你做不到。您只能创建具体类型的函数指针。
答案 3 :(得分:0)
在Visual Studio 2015和GCC上都可以使用命令行选项-std=c++11
template<class T> using fpMember = void (T::*)();