我得到了名为CharacterAnimation的类,它包含一个虚拟方法:

CharacterAnimation : public cocos2d::CCObject {
  public:
  ...
    virtual void start(float td);
}


和几个继承自它的类:


CharacterAnimationBlink
CharactedAnimationDropTear
等等


我想要的是:


创建

std::map<std::string, CharacterAnimation*> animationsList;

像这样填写animationList

animationsList["blink"] = new CharacterAnimationBlink(1,2,3);
animationsList["dropTear"] = new CharacterAnimationDropTear(1,2);

遍历此std :: map
对于每个std::map元素调用

this->schedule(schedule_selector(characterAnimationStartMethodPointer), Character::animationPeriod);



应该放置什么而不是currentAnimationStartMethodPointer?如何从start()访问指向当前对象的std::map方法的指针?

从CCObject.h

typedef void (CCObject::*SEL_SCHEDULE)(float);
...
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

最佳答案

假设您不控制schedule()函数的声明,则无法获得指向特定start()实例的CharacterAnimation函数的单个指针。相反,您在这里需要两件事:成员函数指针,以及指向应在其上调用该函数的实例的引用或指针。

如您的问题所述,schedule()似乎需要成员函数指针(特别是CCObject类中的函数)。您的CharacterAnimation类继承自CCObject,但是指向CharacterAnimation::start()的成员函数指针不是指向CCObject函数的成员函数指针,假设缺少virtualoverride说明符, >在start()中声明,而不是从CharacterAnimation继承。

关于c++ - 通过循环std::map调用类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26263349/

10-11 23:20