- variant[meta header]
- std[meta namespace]
- class template[meta id-type]
- cpp17[meta cpp]
namespace std {
struct monostate {};
}
monostate
は、variant
に空の状態を持たせるための空のクラスである。
variant
は、候補型のうち0番目の型の値をデフォルトで保持する。そのため、エラーによって空になることはあっても、通常の操作として「空」を表現できない。
variant
の候補型としてmonostate
を指定し、そのオブジェクトを保持させることで、擬似的に空の状態を表現できる。候補型の0番目にmonostate
を指定することで、variant
のデフォルト構築状態を空にできる。
monostate
は、唯一の状態としてデフォルト構築状態をもつことを意味する- Boost Variant Libraryでは、これと等価な型が
blank
という名前で定義される
名前 | 説明 | 対応バージョン |
---|---|---|
monostate() = default; |
コンストラクタ | C++17 |
~monostate() = default; |
デストラクタ | C++17 |
monostate& operator=(const monostate&) = default; monostate& operator=(monostate&&) = default; |
代入演算子 | C++17 |
名前 | 説明 | 対応バージョン |
---|---|---|
constexpr bool operator==(monostate, monostate) noexcept; |
等値比較。true を返す |
C++17 |
constexpr bool operator!=(monostate, monostate) noexcept; |
非等値比較。false を返す |
C++17 |
constexpr bool operator<(monostate, monostate) noexcept; |
左辺が右辺より小さいかを判定する。false を返す |
C++17 |
constexpr bool operator<=(monostate, monostate) noexcept; |
左辺が右辺以下かを判定する。true を返す |
C++17 |
constexpr bool operator>(monostate, monostate) noexcept; |
左辺が右辺より大きいかを判定する。false を返す |
C++17 |
constexpr bool operator>=(monostate, monostate) noexcept; |
左辺が右辺以上かを判定する。true を返す |
C++17 |
#include <iostream>
#include <variant>
int main()
{
// デフォルト構築で空にする
std::variant<std::monostate, int, double> v;
if (std::holds_alternative<std::monostate>(v)) {
std::cout << "empty" << std::endl;
}
v = 1;
v = std::monostate{}; // 空にする
}
- std::monostate[color ff0000]
- std::variant[link variant.md]
- std::holds_alternative[link holds_alternative.md]
empty
- C++17
- Clang: 7.3
- GCC: 4.0
- Visual C++: ??