我可以编译一些代码,这些代码使用指向模板化继承类的指针填充指向基类的原始指针的向量。但我已经尝试使用标准库并提升智能指针而不是原始指针,并且代码无法编译。你能解释一下为什么不呢?
这有效:
vector<base*> vec
inherited<double>* elem = new inherited<double> >();
vec.push_back(elem);
这不是:
vector<auto_ptr<base> > vec
auto_ptr<inherited<double> >(new inherited<double> >());
vec.push_back(elem);
我真的不在乎我想要做的事情是否合理我只是觉得可能的事情。
我的完整60 LOC在这里: https://gist.github.com/melvyniandrag/f432140c1aa216696bb6
不要打败我的家伙我已经阅读了一些C++ Templates: The Complete Guide (2002)和一些帖子,但是没有能够方便地连接点。
答案 0 :(得分:0)
您可以使用std::shared_ptr
和std::static_pointer_cast
执行此操作。
vector<shared_ptr<base> > vec;
shared_ptr<inherited<double> > elem(new inherited<double> >());
vec.push_back(static_pointer_cast<inherited<double>,base>(elem));