Skip to content

Latest commit

 

History

History
84 lines (63 loc) · 2.89 KB

monostate.md

File metadata and controls

84 lines (63 loc) · 2.89 KB

monostate

  • 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

処理系