Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Передать std::string как параметр функции, принимающей указатель на экземпляр класса

#cpp


есть две сферы sphere1, sphere2.
есть консоль принимающая команду, к примеру

sphere1.setPos 150 300 0


реально ли взять из std::string часть строки "sphere1"
и преобразовать в указатель на экземпляр класса, для того что бы передать его в функцию,
как параметр.
что то вроде

void setPos( SphereObj* _sphere)
{
    _sphere->setPosition(Vector3(x, y, z));
}

SphereObj convertStringToSphereObj(std::string _str)
{
    тут происходит магия
    return указатель написаный в _str;
}

setPos( convertStringToSphereObj("sphere1"));


и не обязательно так, лишь бы была возможность выбирать метод setPos объекта указанного
в консоли

Если это возможно, намекните пожалуйста что в гугле искать и реально ли это сделать
при помощи LUA или хоть в чём то или как то?

Спасибо за внимание!
    


Ответы

Ответ 1



Да не проблема! Вы должны завести std::map, который будет отображать имя сферы на саму сферу. Тогда волшебный код будет выглядеть очень просто: map sphereNameMap; SphereObj* convertStringToSphereObj(string _str) { map::iterator it = sphereNameMap.find(_str); return it != sphereNameMap.end() ? it->second : NULL; } В случае, если имя неправильное, вернётся nullptr. Ну и вам нужно будет регистрировать все имена: void RegisterSphere(string name, SphereObj* sphere) { if (sphereNameMap.find(name) != sphereNameMap.end()) throw "this name is already registered"; sphereNameMap[name] = sphere; }

Комментариев нет:

Отправить комментарий