![](/img/trans.png)
[英]How to dereference derived class objects stored in a vector of smart pointers?
[英]Passing a vector of smart pointers of derived objects - what is the best solution?
我正在使用兩個類的boost智能指針
class Foo{
};
class Derived : public Foo{
};
typedef boost::shared_ptr<Foo> FooPtr;
typedef boost::shared_ptr<Derived> DerivedPtr;
我將對象的向量保持為
std::vector<DerivedPtr> myVec;
我想在請求基類智能指針向量的方法中使用。
Method( std::vector<FooPtr> input ){
... }
直接使用向量會導致編譯錯誤。
cannot convert argument 1 from 'std::vector<DerivedPtr,std::allocator<_Ty>>' to 'std::vector<FooPtr, std::allocator<_Ty>>'
所以我目前的解決方案是先將向量“下播”到基類指針的新向量中,然后再傳遞給它:
std::vector<FooPtr> downCastVec;
for ( auto & iter : myVec )
downCastVec.push_back( iter );
Method( downCastVec );
這可行,但是我的實際問題是:
有沒有更好/更優雅的方式來解決此問題?
只需使用帶有兩個迭代器的std::vector
構造函數重載來構造一個臨時的:
Method( {myVec.begin(), myVec.end()} )
為了方便起見,您也可以聲明Method()
的重載,該重載采用派生指針的向量,並做到這一點。 這樣可以防止某些頻繁執行的代碼膨脹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.