我得到了名为 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
?如何从 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
函数的成员函数指针,假设缺少 virtual
或 override
说明符 start()
在 CharacterAnimation
中声明,而不是从 CCObject
继承。
关于c++ - 通过循环 std::map 调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263349/