Я хочу создать список, который может содержать каждый объект, который я кидаю в него, при условии, что они имеют один и тот же базовый класс ABSTRACT. Вот пример кода того, как я хочу достичь этого.
#include <iostream>
#include <memory>
#include <list>
class Observer
{
public:
virtual void update() = 0;
};
class RequestStateObserver
{
public:
void registerObserver(std::shared_ptr<Observer> o){
observerList.push_back(o);
}
private:
std::list<std::shared_ptr<Observer>> observerList;
};
class RestRequestCreator :Observer
{
void update() override;
};
void RestRequestCreator::update()
{
std::cout<<"RestRequestCreator::update()";
}
class dbHandler :Observer
{
void update() override;
};
void dbHandler::update() {
std::cout<<"dbHandler::update()";
}
int main()
{
RestRequestCreator rrc;
RequestStateObserver rso;
dbHandler dbhandler;
std::shared_ptr<RequestStateObserver> stateObserver;
std::shared_ptr<RestRequestCreator> rr_ptr = std::make_shared<RestRequestCreator>(rrc);
rso.registerObserver(rr_ptr);
rso.registerObserver(std::make_shared<Observer> (dbhandler));
}
o->registerObserver(std::make_shared<Observer> dbhandler)
скажет мне, что я не могу создать Observer, поскольку это абсолютный класс, который имеет смысл, но
o->registerObserver(rr_ptr)
скажет мне, что он не может конвертировать std::shared_ptr<Observer>
в std::shared_ptr<RestRequestCreator>
В настоящий момент я не уверен, как решить эту проблему или что именно я должен попробовать дальше. Помогут ли мне шаблоны? Если я прав, они просто позволят мне добавить как можно больше объектов ОДНОГО дочернего класса в мой Список, если это не так, пожалуйста, сообщите мне, и я перечитал бы шаблоны снова.