В поисках способа хранения объектов CRTP в контейнере я обнаружил следующий вопрос:
Полиморфная коллекция шаблонов Curily Recurring Template Pattern (CRTP) в C ++?
Я попробовал отмеченное решение
https://stackoverflow.com/a/24795227/5475431
, но компилятор жалуется на ошибки типа:
no known conversion for argument 1 from ‘std::shared_ptr<DerivedA>’ to ‘const std::shared_ptr<BaseInterface>&’
вот моя попытка:
#include <vector>
#include <memory>
struct BaseInterface {
virtual ~BaseInterface() {}
virtual double interface() = 0;
};
template <typename Derived>
class Base : BaseInterface {
public:
double interface(){
return 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;}
};
int main() {
std::vector<std::shared_ptr<BaseInterface>> ar;
ar.emplace_back(std::make_shared<DerivedA>());
return 0;
}
У вас есть идеи, как исправить ошибку компилятора или как лучше решить проблему?Заранее спасибо