我正在尝试为游戏引擎设置一个“类似协程”的系统,并且在寻找任何方法来唯一标识模板函数中指向成员函数的指针时遇到了麻烦。
我希望能够通过调用基类中的 CoStart 和 CoStop 方法来启动和停止“行为”派生类中的协程,这些方法采用指向成员函数的指针:
CoStart( c_BlinkCycle );
CoStop( c_BlinkCycle );
协程方法具有标准签名的地方,例如:
CoCommand MyBehavior::c_BlinkCycle( int step ) {
// ...
}
我可以在基类中使用模板来很好地处理这些:
template<typename T>
void CoStart( CoCommand (T::* coMethod)(int) ) {
// ...
}
但是,我希望能够在它们第一次使用时(在 CoStart() 中)为协程方法存储一些元数据,并且不知道有任何独特的方式来识别它们。IE:
if ( !metadataVector.contains( coMethod ) ) {
// ... set up metadata
}
如果我能以某种方式获得指向成员函数的地址、类型 ID、名称或任何类型的唯一标识符,我就会被设置。但是对于模板,我似乎没有任何可以将它们转换为的共享指针类型,所以我有点不知所措。(仅供参考,我稍后会使用 boost::function 和 boost::bind ,但看起来它们也不允许比较)。