Boost.Optionalは、ダミータイプを使用して、の初期化されていないインスタンスを構築できるようにしますboost::optional<T>
。このタイプはと呼ばれnone_t
、インスタンスnone
は便宜上ヘッダーにすでに定義されているため、次のようなコードを記述できます。
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