簡體   English   中英

typedef boost :: shared_ptr <MyJob> PTR; 或#define Ptr boost :: shared_ptr

[英]typedef boost::shared_ptr<MyJob> Ptr; or #define Ptr boost::shared_ptr

我剛剛開始研究一個新的代碼庫,其中每個類都包含一個shared_ptr typedef( 類似於這個 ),如:

typedef boost::shared_ptr<MyClass> Ptr;

是保存輸入boost :: shared_ptr的唯一目的嗎?

如果是這樣的話,唯一的理由是不這樣做

#define Ptr boost::shared_ptr 

在一個常見的標題中#define的一般問題? 然后你可以這樣做:

Ptr<MyClass> myClass(new MyClass);

這不是打字比

MyClass::Ptr myClass(new MyClass);

並在每個類中保存Ptr定義。

始終全局定義宏(#define)。 這意味着每次使用'string'Ptr(甚至變量)都將被宏替換。

typedef可以放在一個類中,在命名空間中......所以你可以更好地控制它。

編輯:另一個優點是你可以在不同的類中使用不同的Ptr類型,例如

  • ClassX :: Ptr是一個boost shared_ptr
  • ClassY :: Ptr可以是另一個shared_ptr
  • ClassZ :: Ptr可以是一個簡單的“Class Z *”指針

如果然后在模板化代碼中使用這些類,則可以使用T :: Ptr作為指向類的指針類型,並且模板將使用最適合該類的指針。

已經在整個網絡上廣泛討論了定義的缺點。 例如,它將與另一個命名空間中的Ptr沖突:

someLibrary::Ptr somethingElse -> somelibrary::crap

如果輸入boost :: shared_ptr真的很煩,你可以using namespace boost 它將保持可讀性(人們真的想知道它的提升shared_ptr)。

我可以建議你的另一件事是一系列的typedef。 在我的公司中,有一個約定MyClassPtr是boost :: shared_ptr的typedef。

是保存輸入boost :: shared_ptr的唯一目的嗎?

是的,差不多。 好吧,不是為了節省打字本身,而是為了提高可讀性 但我認為這就是你的意思。

比較這些,看看你喜歡哪個。 除了了解宏和命名空間混亂的問題之外,沒有正確的答案。

boost::shared_ptr<Foo> func (boost::shared_ptr<Foo> a, boost::shared_ptr<Foo> b);

shared_ptr<Foo> func (shared_ptr<Foo> a, shared_ptr<Foo> b);

Ptr<Foo> func (Ptr<Foo> a, Ptr<Foo> b);

Foo::ptr func (Foo::ptr a, Foo::ptr b);

FooPtr func (FooPtr a, FooPtr b);

Foo* func (Foo* a, Foo* b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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