【问题标题】:Does C++ have a unit type?C++ 有单位类型吗?
【发布时间】: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 也没有意义,因为传入 truefalse 之间没有区别 - 需要的是单位类型。

【问题讨论】:

  • 不清楚你在问什么 - 发布一些代码来说明你想要什么。
  • @NeilButterworth 我做到了。
  • OP 正在谈论this。在 Scala 中,有一种称为 Unit 的类型用于泛型编程,以防函数被参数化为不返回任何内容。您不能使用void 进行参数化,因为这样就无法分配函数结果,因此您可以用一个空类替换Unit 类。类似的概念也存在于其他函数式语言中。 OP 询问 C++ 中是否有类似的东西,他们是对的。是std::monostate
  • 奇怪的是答案在原始问题中!
  • @user2023370 如果您检查历史记录,则不是;作者自己找到了答案,然后编辑了问题。

标签: c++ unit-type


【解决方案1】:

它被称为std::monostate(C++17 起)。它还重载了 == 运算符以返回 true,以及其他一些运算符,因此 std::monostate 的所有实例都是相等的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2019-09-12
      • 2013-02-24
      • 1970-01-01
      • 2010-11-21
      • 2020-05-24
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多