Как организовать владение одним экземпляром класса коллекции из объектов наследников абстрактного класса qt c++?

Имеется абстрактный класс IAction:

enum ActionResult_t
{
    RESULT_UNKNOWN,
    RESULT_IN_PROCESS,
    RESULT_ERROR,
    RESULT_FINISH
};

struct IAction
{
    friend class ActionsEnivroment;
protected:

    ActionsEnivroment& enivroment;

public:

    QThreadStorage<QCache<char, double>> args;

    explicit IAction(ActionsEnivroment& ae) : enivroment(ae)
    {}

    virtual bool isCorrected(QString&) = 0;

    virtual void serializate(std::ostream&) = 0;
    virtual void deserializate(std::istream&) = 0;

    virtual void startExecution(){}
    virtual ActionResult_t execute(ManipulatorController&, qint64) = 0;
    virtual void endExecution(){}

    virtual ~IAction(){}
};

Также имеется класс ActionsEnivroment

class ActionsEnivroment
{

public:

    //Some variables and methods

    ActionsEnivroment() = default;

    template<typename T>
    T* createAction()
    {
        T* act = new T(*this);
        //???
        return act;
    }

    bool deleteAction(IAction* a)
    {
        //???
        return true;
    }

};

Как реализовать механизм, в котором ActionsEnivroment является владельцем для всех наследников класса IIAction. При этом только он может создать и удалить их?


Я пытался реализовать std::list<std::shared_ptr<IAction>> внутри ActionsEnivroment, где хранились бы объекты всех созданных классов, но возникли ошибки.


Ответы (0 шт):