将字符串映射到 C++ 中的 Class 函数
Map String to Class Function in C++
我正在用 C++ 编写一个 cocos2dx 场景。我希望根据按钮按下创建一组字符串方向,这些按钮将在我更新场景时执行。问题是我需要将这些字符串与 class 的方法相关联,这些方法可以被 subclasses 覆盖,以自定义基于按钮按下的行为。我正在努力创建字符串和指向场景 class 方法的指针之间的映射。
这是适用的代码
在Scene.h
std::map<std::string, void (Scene::*)()> correlateDirections;
在Scene.cpp
correlateDirections["c"] = &this->c
void Scene::c() {
std::cout << "c" << std::endl;
}
XCode 给我错误 "Cannot create a non-constant pointer to member function."
当我试图使指向方法的指针成为常量时,它仍然给出同样的错误。
在Scene.h
std::map<std::string, void const (Scene::*)()> correlateDirections;
因为它是指向成员函数的指针,所以它不是 self-contained 并且调用它需要 class 场景的对象。请参见下面的示例:
#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;
}
我正在用 C++ 编写一个 cocos2dx 场景。我希望根据按钮按下创建一组字符串方向,这些按钮将在我更新场景时执行。问题是我需要将这些字符串与 class 的方法相关联,这些方法可以被 subclasses 覆盖,以自定义基于按钮按下的行为。我正在努力创建字符串和指向场景 class 方法的指针之间的映射。
这是适用的代码
在Scene.h
std::map<std::string, void (Scene::*)()> correlateDirections;
在Scene.cpp
correlateDirections["c"] = &this->c
void Scene::c() {
std::cout << "c" << std::endl;
}
XCode 给我错误 "Cannot create a non-constant pointer to member function."
当我试图使指向方法的指针成为常量时,它仍然给出同样的错误。
在Scene.h
std::map<std::string, void const (Scene::*)()> correlateDirections;
因为它是指向成员函数的指针,所以它不是 self-contained 并且调用它需要 class 场景的对象。请参见下面的示例:
#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;
}