我知道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
没有意义,因为传递true
与false
之间没有区别 - 什么是需要的是单位类型。
答案 0 :(得分:6)
它被称为std::monostate
。它还会重载==
运算符以返回true,以及其他一些运算符,以便std::monostate
的所有实例都相等。
答案 1 :(得分:4)
C ++具有多种单位类型,包括
std::nullptr_t
std::monostate
std::tuple<>
struct unit {};