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

Рейтинг: 3Ответов: 1Опубликовано: 25.04.2015

есть две сферы 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 или хоть в чём то или как то?

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

Ответы

▲ 6Принят

Да не проблема!

Вы должны завести std::map<std::string, SphereObj*>, который будет отображать имя сферы на саму сферу.

Тогда волшебный код будет выглядеть очень просто:

map<string, SphereObj*> sphereNameMap;

SphereObj* convertStringToSphereObj(string _str)
{
    map<string, SphereObj*>::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;
}