函数指针作为模板

时间:2011-09-03 14:15:02

标签: c++

如何将函数指针编写为模板?

template <typename T>
T (*PtrToFunction)(T a); 

4 个答案:

答案 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::*)();