Boost.Optional使用虛擬類型來允許構建未初始化的boost::optional<T>
實例。這種類型稱爲none_t
,和實例none
爲了方便標頭已經被定義,讓我們寫代碼如下所示:boost :: none_t實現的基本原理是什麼?
boost::optional<int> uninitialized(boost::none);
綜觀none_t
的定義,我注意到,它實際上是對應於指針到部件的一些虛設結構一個typedef:
namespace boost {
namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;
none_t const none = (static_cast<none_t>(0)) ;
} // namespace boost
什麼是使用這樣一個令人費解的typedef在這樣一個簡單的空結構的優點?
namespace boost {
struct none_t {};
none_t const none;
} // namespace boost
我剛剛意識到(花了我一段時間......),這正是[Safe-Bool成語](http://www.artima.com/cppsource/safebool.html)的結構。 –
@MatthieuM .:你的意思是你剛剛在2012年6月閱讀了評論Nawaz發佈在你的答案上。 ;) –
沒有,重新發現它自己:/早上很難:/ –