Indeed, you need to add the appropriate base class without a template:
class AbstractBase
{
public:
virtual ~AbstractBase() {}
virtual void foo() = 0;
};
template <class ChildType>
class Base : CrtpBase<ChildType>, public AbstactBase
{
void foo() override { this->real_this().boo(); }
};
Then declare your vector as std::vector<AbstractBase*>.
( , , CRTP), - ++.
, . ,
foo ,
boo - ( , ),
foo, ,
foo, , CRTP-.
, boo -like foo, boo virtual, foo , CRTP. : (foo) (boo).
, std::vector; - .