C++ 有单位类型吗?

Does C++ have a unit type?

我知道 C++ 标准库有一个单位类型——我以前见过它——但我不记得它叫什么了。以一个"m"开头,我知道的就这么多,相当于这个定义:

struct Unit {};

基本上,单位类型是一种只有一个不同值的类型 - 与具有零值的 void 和具有两个值的 bool 形成对比。


如果您必须知道,我的特定用例是关于具有联合成员的模板 class 的构造函数。它看起来像这样:

template<typename T>
struct foo {
    union {
        T t;
        std::string str;
    } data;
    foo(T const& t) {
        data.t = t;
    }
    foo(std::monostate unused, std::string const& str) {
        data.str = str;
    }
};

为了能够区分两个构造函数,如果T等于std::string,第二个构造函数中需要一个哨兵参数。 void 当然不会起作用, bool 也没有意义,因为传入 truefalse 之间没有区别——需要的是一个单位类型。

它被称为 std::monostate (C++17 起)。它还将 == 运算符和其他一些运算符重载为 return true,以便 std::monostate 的所有实例都相等。

C++ 有任意多的单元类型,包括