Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用模板参数定义函数指针_C++_Templates_Function Pointers - Fatal编程技术网

C++ 如何使用模板参数定义函数指针

C++ 如何使用模板参数定义函数指针,c++,templates,function-pointers,C++,Templates,Function Pointers,考虑这一点: 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 cou

考虑这一点:

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; }
typedef void(*ExecFunc)(int val);//我该怎么处理这个?
模板类执行器
{
void doStuff(){mFunc(mVal);}
void setFunc(ExecFunc func){mFunc=func;}
xmval;
ExecFunc mFunc;//错误…故障。。
};
模板addOne(X val){val+=1;}

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

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

template<class X>
using ExecFunc = void(*)(X);
模板
使用ExecFunc=void(*)(X);
定义
ExecFunc

在C++03中,您必须使用以下选项:

template<class X>
struct ExecFunc {
  typedef void(*type)(X);
};
模板
结构ExecFunc{
类型定义无效(*类型)(X);
};

并使用
typename ExecFunc::type
Executor
中使用template参数在类中定义它。