【发布时间】:2018-09-29 08:19:06
【问题描述】:
我知道 C++ 标准库有一个单元类型——我以前见过它——但我不记得它叫什么了。它以“m”开头,我知道的就这么多了,相当于这个定义:
struct Unit {};
基本上,单元类型是只有一个不同值的类型 - 相比之下,void 有零值,bool 有两个值。
如果您必须知道,我的特定用例是关于具有联合成员的模板类的构造函数。它几乎看起来像这样:
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 也没有意义,因为传入 true 和 false 之间没有区别 - 需要的是单位类型。
【问题讨论】:
-
不清楚你在问什么 - 发布一些代码来说明你想要什么。
-
@NeilButterworth 我做到了。
-
OP 正在谈论this。在 Scala 中,有一种称为
Unit的类型用于泛型编程,以防函数被参数化为不返回任何内容。您不能使用void进行参数化,因为这样就无法分配函数结果,因此您可以用一个空类替换Unit类。类似的概念也存在于其他函数式语言中。 OP 询问 C++ 中是否有类似的东西,他们是对的。是std::monostate -
奇怪的是答案在原始问题中!
-
@user2023370 如果您检查历史记录,则不是;作者自己找到了答案,然后编辑了问题。