如何用模板参数对函数指针进行typedef

How to typedef a function pointer with template arguments

本文关键字:指针 typedef 函数 何用模 参数      更新时间:2023-10-16

考虑一下:

typedef void (*ExecFunc)( int val );
class Executor
{
  void doStuff() { mFunc( mVal ); }
  void setFunc( ExecFunc func ) { mFunc = func; }
  int           mVal;
  ExecFunc      mFunc;
};
void addOne( int val ) { val = val+1; } // this could be passed as an ExecFunc. 

非常简单。假设现在我想将其模板化?

typedef void (*ExecFunc)( int val );    // what do I do with this?
template < typename X > class Executor
{
  void doStuff() { mFunc( mVal ); }
  void setFunc( ExecFunc<X> func ) { mFunc = func; }
  X                mVal;
  ExecFunc<X>      mFunc; // err... trouble..
};
template < typename X > addOne( X val ) { val += 1; }

那么,如何创建模板化的函数指针呢?

在C++11中,您可以使用以下内容:

template<class X>
using ExecFunc = void(*)(X);

定义了CCD_ 1。

在C++03中,您必须使用以下内容:

template<class X>
struct ExecFunc {
  typedef void(*type)(X);
};

并且在CCD_ 3中使用CCD_。