Was ist der Grund für die Implementierung von boost :: none_t?
Boost.Optional verwendet einen Dummy-Typ, um nicht initialisierte Instanzen von zu erstellenboost::optional<T>
. Dieser Typ heißtnone_t
und eine Instanznone
ist der Einfachheit halber bereits in einem Header definiert, sodass wir folgenden Code schreiben können:
boost::optional<int> uninitialized(boost::none);
Betrachtet man die Definition vonnone_t
, Ich habe festgestellt, dass es sich tatsächlich um eine typedef handelt, die einem Zeiger auf ein Mitglied einer Dummy-Struktur entspricht:
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
Was sind die Vorteile einer solchen verschachtelten Typdefinition gegenüber einer einfachen leeren Struktur wie dieser?
namespace boost {
struct none_t {};
none_t const none;
} // namespace boost