C++ 函数指针作为模板

C++ 函数指针作为模板,c++,C++,如何编写函数指针作为模板 template <typename T> T (*PtrToFunction)(T a); 模板 T(*ptr功能)(T a); 如果您的意思是为该函数创建一个类型,您可以执行以下操作: template<typename T> struct Function { typedef T (*Ptr)(T); }; 模板 结构函数{ 类型定义T(*Ptr)(T); }; 然后像这样使用它 int blah(Function<i

如何编写函数指针作为模板

template <typename T>
T (*PtrToFunction)(T a); 
模板
T(*ptr功能)(T a);

如果您的意思是为该函数创建一个类型,您可以执行以下操作:

template<typename T>
struct Function {
    typedef T (*Ptr)(T);
};
模板
结构函数{
类型定义T(*Ptr)(T);
};
然后像这样使用它

int blah(Function<int>::Ptr a) { }
intblah(函数::ptra){

我假设您正在尝试声明一个类型(如果没有具体的类型,您不能声明“模板变量”)

C++03没有模板typedefs,您需要使用结构作为解决方法:

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;
模板
结构函数{
类型定义T(*类型)(T a);
};
...
//直接使用模板
FuncPtr::Type intf;
//躲在打字机后面
typedef functptr::Type DoubleFn;
DoubleFn-doublef;
C++11模板别名将消除struct解决方案,但目前没有编译器真正实现这一点

template <typename T>
typedef T (*FuncPtr)(T a);

// Use template directly
FuncPtr<int> intf;

// Hide behind a typedef
typedef FuncPtr<double> DoubleFn;
DoubleFn doublef;
模板
类型定义T(*FuncPtr)(T a);
//直接使用模板
FuncPtr-intf;
//躲在打字机后面
typedef FuncPtr DoubleFn;
DoubleFn-doublef;

你不能那样做。您只能创建具体类型的函数指针。

在Visual Studio 2015上可以,在GCC上应该使用命令行选项
-std=c++11

template<class T> using fpMember = void (T::*)(); 
使用fpMember=void(T::*)()的模板;
这相当于一个不存在的“模板类型定义”。在C++11中,你有模板别名,但我不确定它们是否涵盖了这种情况。如果你的应用程序的大小保证了这一点,请使用更通用的functor对象,比如它允许你使用任何类型的可调用对象,而不仅仅是函数指针。如果您正在编写一个小应用程序,不用麻烦了。只需更新这个旧条目,说明从GCC4.7开始,GCC现在支持模板别名。