Полиморфная коллекция шаблонов Curiously Recurring Template Pattern (CRTP) в C ++?
У меня есть классBase
из которого у меня есть два класса,DerivedA
а такжеDerivedB
как определено ниже.
template <typename Derived>
class Base{
public:
double interface(){
static_cast<Derived*>(this)->implementation();
}
};
class DerivedA : public Base<DerivedA>{
public:
double implementation(){ return 2.0;}
};
class DerivedB : public Base<DerivedB>{
public:
double implementation(){ return 1.0;}
};
Короче говоря, я пытаюсь сделать следующее, чтобы поддерживать коллекцию объектов, некоторые из которыхDerivedA
и некоторые из которыхDerivedB
:
std::vector<std::shared_ptr<Derived>>
Что, очевидно, невозможно, потому что я сейчас сделал классDerived
шаблонный класс.
Есть ли способ, которым я могу создать / поддерживать полиморфную коллекцию объектов?
РЕДАКТИРОВАТЬ: К сожалению, простая шаблонная структура не работает как функцияimplementation
шаблонизируется в моей реальной программе - так тогдаimplementation
должно быть шаблонной чистой виртуальной функцией, чего не может быть. Простите за отсутствие объяснений.