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