[英]Containers, Smart Pointers and Templated Inherited Classes
我可以编译一些代码,该代码用指向模板化继承类的指针填充指向基类的原始指针的向量。 但是我尝试使用标准库并增强智能指针而不是原始指针,并且代码无法编译。 你能解释为什么不吗?
这有效:
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 ++模板:完整指南(2002)和此处的一些帖子,但未能方便地连接各个点。
您可以使用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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.