2014-06-12 20 views
0

我想弄清楚用智能指針可以實現什麼。
但有些東西感覺像是一種障礙。我們如何處理共享/弱ptr而不會使代碼變得龐大?

一個普通的指針有一個簡短的定義Someclass *p但智能指針有點長shared_ptr<SomeClass> p我覺得當你不得不處理這些指針的模板(如向量)時,它開始變得厭煩。

那麼智能指針有一個簡短的表示法?還是有一個標準的方式來允許shorthands?

我知道typedef,但它仍然覺得我只是到處都有大量的typedef。

+2

使用'auto'。而且大多數IDE應該爲你做自動補全,這麼長的名字應該沒有太大的區別 –

回答

1

C++ 11使這更舒適!

我使用類型別名很多來對付這個問題。這其中,尤其使我的代碼了很多更具可讀性:

template <class T> 
using PtrList<T> = std::vector<std::shared_ptr<T>>; 

這是唯一真正需要的接口的,所以你應該在實現使用autostd::make_shared獨佔。

當使用或迭代指針容器時,使用Boost.Range也非常方便 - 特別是boost::adaptors::indirected

下面是一個使用了大量的智能指針,但避免了長期類型的一個小例子:從C++ 11

PtrList<Bar> foo_to_bar(PtrList<Foo> const& fooList) 
{ 
    PtrList<Bar> resultList; 
    resultList.reserve(fooList.size()); 

    for (auto&& foo : fooList | boost::adaptors::indirected) 
    { 
    auto bar = std::make_shared<Bar>(foo); 
    bar->enableAwesomeness(); 
    resultList.push_back(bar); 
    } 

    return resultList; 
}