C ++有单位类型吗?

时间:2018-04-19 00:05:53

标签: c++ unit-type

我知道C ++标准库有一个单元类型 - 我以前见过它 - 但我不记得它叫什么。它以" m"开头,我知道的很多,它等同于这个定义:

struct Unit {};

基本上,单位类型是一种只有一个不同值的类型 - 与void的值相对,后者的值为零,而bool则为两个。

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

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,需要第二个构造函数中的sentry参数。 void当然不会工作,bool没有意义,因为传递truefalse之间没有区别 - 什么是需要的是单位类型。

2 个答案:

答案 0 :(得分:6)

它被称为std::monostate。它还会重载==运算符以返回true,以及其他一些运算符,以便std::monostate的所有实例都相等。

答案 1 :(得分:4)

C ++具有多种单位类型,包括