Я пишу сцену cocos2dx на C++. Я ищу, чтобы создать набор строковых направлений на основе нажатия кнопок, которые будут выполняться при обновлении сцены. Проблема в том, что мне нужно сопоставить эти строки с методами класса, которые могут быть переопределены подклассами для настройки поведения на основе нажатия кнопки. Я изо всех сил пытаюсь создать карту между строками и указателями на методы класса сцены.Map String to Class Function в C++
Здесь применяется код
В 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;
Использование '& Scene :: c', чтобы получить адрес функции члена – MRB
, что работает, но как я вызов метода в функции обновления? correlateDirections [string](); ? Говорят, что возвращаемый тип не является функцией или функцией. –
Получите указатель на функцию и вызовите ее следующим образом: '(instance. * FuncPointer) (args)'. И если вы хотите использовать 'this' в качестве экземпляра:' (this -> * funcPointer) (args) '. Возвращаемый тип 'correlateDirections [string]' является итератором. fetch его внутренние данные: '(this -> * (* correlateDirections [string]))()' – MRB