簡體   English   中英

在使用boost shared_ptr時使用默認參數

[英]Using default parameters when using boost shared_ptr

我將boost shared_ptr作為功​​能的參數,我希望該參數具有一些默認值。

void foo(boost::shared_ptr<myclass> ptr = nullptr);

因為ptr不是指針,而是一個類。

那我該怎么辦?

在默認模板函數參數中發現了一個類似的問題: boost :: shared_ptr和nullptr

但是那里的解決方案只是切換到std::shared_ptr ,但是我做不到

謝謝

nullptr初始化boost::shared_ptr是完全可以的。 為此,它具有一個特殊的構造函數:

#if !defined( BOOST_NO_CXX11_NULLPTR )
shared_ptr( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn() // never throws
{
}
#endif

boost::detail::sp_nullptr_t以可移植的方式解析為nullptr_t

由於您使用的是nullptr ,因此必須使用C ++ 11,因此您應該能夠做到這一點:

void foo(boost::shared_ptr<myclass> ptr = {});

這使默認參數成為默認構造的shared_ptr ,與使用nullptr初始化的默認參數相同。 它要求編譯器支持統一的初始化語法,而不是要求Boost版本支持從nullptr_t構造shared_ptr

如果您的編譯器無法處理該問題,請使用ForEveR的答案。

為什么不簡單?

void foo(boost::shared_ptr<myclass> ptr = boost::shared_ptr<myclass>());

我認為問題不是“成為類”,而是所涉及的構造函數是明確的。 您的表格將需要隱式轉換。 您可以使用顯式形式解決此問題: boost::shared_ptr<myclass>(nullptr)boost::shared_ptr<myclass>() ,無論您的版本支持哪種形式。

暫無
暫無

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

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