Raf*_*sta 7 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 could be passed as an ExecFunc.
Run Code Online (Sandbox Code Playgroud)
非常简单.假设我现在要模板化这个?
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; }
Run Code Online (Sandbox Code Playgroud)
那么如何创建一个模板化的函数指针呢?
Yak*_*ont 16
在C++ 11中,您可以使用:
template<class X>
using ExecFunc = void(*)(X);
Run Code Online (Sandbox Code Playgroud)
定义ExecFunc<X>.
在C++ 03中,你必须使用它:
template<class X>
struct ExecFunc {
typedef void(*type)(X);
};
Run Code Online (Sandbox Code Playgroud)
并typename ExecFunc<X>::type在内部使用Executor.
| 归档时间: |
|
| 查看次数: |
4528 次 |
| 最近记录: |