名前空間
変種
操作

std::monostate

提供: cppreference.com
< cpp‎ | utility‎ | variant
 
 
 
 
ヘッダ <variant> で定義
struct monostate { };
(C++17以上)

std::variant で行儀の良い空の選択肢として使うことが意図された単位型です。 特に、デフォルト構築可能でない型の variant は、 std::monostate をその最初の選択肢に持つことで、デフォルト構築可能になります。

目次

[編集] メンバ関数

コンストラクタ
(暗黙に宣言)
トリビアルな暗黙のデフォルト/コピー/ムーブコンストラクタ
(パブリックメンバ関数)
デストラクタ
(暗黙に宣言)
トリビアルな暗黙のデストラクタ
(パブリックメンバ関数)
operator=
(暗黙に宣言)
トリビアルな暗黙のコピー/ムーブ代入演算子
(パブリックメンバ関数)

[編集] 非メンバ関数

constexpr bool operator<(monostate, monostate) noexcept { return false; }

constexpr bool operator>(monostate, monostate) noexcept { return false; }
constexpr bool operator<=(monostate, monostate) noexcept { return true; }
constexpr bool operator>=(monostate, monostate) noexcept { return true; }
constexpr bool operator==(monostate, monostate) noexcept { return true; }

constexpr bool operator!=(monostate, monostate) noexcept { return false; }

std::monostate のすべてのインスタンスは等しいものとして比較されます。

[編集] ヘルパークラス

std::hash<std::monostate>

template <> struct std::hash<monostate>;

std::monostate に対する std::hash アルゴリズムの特殊化

[編集]

#include <variant>
#include <iostream>
 
struct S
{
    S(int i) : i(i) {}
    int i;
};
 
int main() {
 
    // Without the monostate type this declaration will fail.
    // This is because S is not default-constructible.
 
    std::variant<std::monostate, S> var; 
 
    // var.index() is now 0 - the first element
    // std::get<S> will throw! We need to assign a value
 
    var = 12; 
 
    std::cout << std::get<S>(var).i << '\n';
}

出力:

12


[編集] 関連項目

variant オブジェクトを構築します
(パブリックメンバ関数) [edit]