在C ++中将字符串映射到类函数

时间:2017-01-22 05:28:24

标签: c++ cocos2d-x member-function-pointers

我正在用C ++编写一个cocos2dx场景。我期待基于按钮按下创建一组字符串方向,这将在我更新场景时执行。问题是我需要将这些字符串与类的方法相关联,这些方法可以被子类覆盖,以根据按钮按下来自定义行为。我正在努力在字符串和指向场景类方法的指针之间创建一个映射。

以下是适用的代码

在Scene.h中

std::map<std::string, void (Scene::*)()> correlateDirections;

在Scene.cpp中

correlateDirections["c"] = &this->c

void Scene::c() {
    std::cout << "c" << std::endl;
}

XCode给出了错误“无法创建指向成员函数的非常量指针。”

当我尝试使指向方法的指针保持不变时,它仍会给出相同的错误。

在Scene.h中

std::map<std::string, void const (Scene::*)()> correlateDirections;

1 个答案:

答案 0 :(得分:1)

因为它是指向成员函数的指针,所以它不是自包含的,并且需要它来调用它和类Scene的对象。见下面的例子:

#include <map>
#include <string>
#include <iostream>

class Scene
{
public:
    void runMe() { std::cout << "runMe" << std::endl; }
};

int main()
{
    std::map<std::string, void (Scene::*)()> sfMap;
    Scene scene;
    sfMap["runMe"] = &Scene::runMe;

    // call via reference to object
    (scene.*sfMap["runMe"])();

    // call via pointer to object
    Scene* p = &scene;
    (p->*sfMap["runMe"])();    

    return 0;
}