我正在为游戏引擎设置一个“类协程”系统,并且在模板函数中找不到任何唯一标识指向成员函数的方法,遇到了麻烦。
我想通过在基类中调用CoStart和CoStop方法并传递成员函数指针来启动和停止“行为”派生类中的协程。
如果我能以某种方式获取指向成员函数的地址、类型 ID、名称或任何一种唯一标识符,那就好了。但是使用模板时,似乎没有任何共享指针类型可以将它们转换为,所以我有点不知所措。(FYI,我后来使用了 boost::function 和 boost::bind,但它们似乎也不允许比较)。
我想通过在基类中调用CoStart和CoStop方法并传递成员函数指针来启动和停止“行为”派生类中的协程。
CoStart( c_BlinkCycle );
CoStop( c_BlinkCycle );
协程方法具有标准签名,例如:
CoCommand MyBehavior::c_BlinkCycle( int step ) {
// ...
}
我可以在基类中使用模板来很好地处理这些问题:
template<typename T>
void CoStart( CoCommand (T::* coMethod)(int) ) {
// ...
}
然而,我希望能够在协程方法首次使用时(在CoStart()中)存储一些元数据,但不知道任何唯一标识它们的方式。例如:
if ( !metadataVector.contains( coMethod ) ) {
// ... set up metadata
}
如果我能以某种方式获取指向成员函数的地址、类型 ID、名称或任何一种唯一标识符,那就好了。但是使用模板时,似乎没有任何共享指针类型可以将它们转换为,所以我有点不知所措。(FYI,我后来使用了 boost::function 和 boost::bind,但它们似乎也不允许比较)。
C
,其中包含对象c1
和c2
,那么成员函数C::someFunction()
对于对象c1
和c2
是否应该相等?或者函数指针应该针对每个实例具体化? - Some programmer dude