c++ - 通过循环 std::map 调用类方法

标签 c++ cocos2d-x pointer-to-member

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

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

和几个继承自它的类:

  • CharacterAnimationBlink
  • CharactedAnimationDropTear
  • 等等

我想要的是:

  1. 创建

    std::map<std::string, CharacterAnimation*> animationsList;
    
  2. 像这样填充 animationList:

    animationsList["blink"] = new CharacterAnimationBlink(1,2,3);
    animationsList["dropTear"] = new CharacterAnimationDropTear(1,2);
    
  3. 遍历此 std::map

  4. 对每个std::map元素调用

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

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

来自 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 中声明,而不是从 CCObject 继承。

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

相关文章:

c++ - Cocos2d-x-clang : error: linker command failed with exit code 1 (use -v to see invocation)

c++ - 使用 dlib 的成员函数指针未在此范围内声明

C++ 对象函数到函数指针

javascript - 无法编译android cocos2d文件--Android-Studio

c++ - cocos2d-x 3 添加 Sprite 到布局

c++ - 找到网格游戏中所有可射击的单元格

c++ - #includes 和不完整类型有问题

C++ 成员函数指针

c++ - 在 Visual Studio 2005 中创建 DLL

c++ - 不用每次都编译使用alglib