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参数在类中定义它。