Как получить ссылку / указатель на класс (не объект)?
Короткий ответ, вы не можете. К сожалению, C ++ не работает таким образом.
Однако, чтобы решить вашу конкретную проблему, у вас есть опция фабричного шаблона , который будет выглядеть примерно так:
template <class T>
class factory {
public:
virtual std::unique_ptr<T> createObject() = 0;
};
class base { // some base class common to all the types you are intending to create
};
class foo : public base { // some class you want to create
};
class fooCreator : public fatory<base> {
public:
std::unique_ptr<T> createObject() {
return someUniquePointerToANewObject;
}
}
int main() {
std::map<std::string, std::unique_ptr<factory<base>>> myMap; // because we are creating some bases
myMap["some key"] = new myFooCreator;
// now let's create some new `base`
if(myMap.find("some matching key") != myMap.end()) {
std::unique_ptr<base> myBaseObject = myMap["some matching key"]->createObject();
// use created object
}
return 0;
}
Конечно, здесь есть много вещей, которые могут пойти не так, например, если по какой-то причине вы нажмете nullptr
на myMap
. Но, по крайней мере, у вас есть представление о том, как это выглядит сейчас.