簡體   English   中英

傳遞派生對象的智能指針矢量-最佳解決方案是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM