C++是否存在单元类型?求问标准库中以m开头的单元类型名称
你要找的绝对是
std::monostate! - 它就是C++标准库中以字母"m"开头的单元类型,完全匹配你描述的特性:本质是仅有一种取值的类型,等价于你说的
struct Unit {};,刚好和无取值的void、有两种取值的bool形成对比。 - 它定义在
<variant>头文件中,在你提到的带有union成员的模板类构造函数场景里特别实用:当模板参数类型可能不支持默认构造时,std::monostate可以作为union的一个"空状态"成员,让整个模板类能安全地提供默认构造函数。举个贴合你场景的示例:
#include <variant> template <typename T> class UnionTemplate { private: union { T data; std::monostate empty_tag; }; bool holds_data; public: // 默认构造:用monostate标记空状态,无需初始化T UnionTemplate() : empty_tag(std::monostate{}), holds_data(false) {} // 带值构造:初始化T类型成员 explicit UnionTemplate(const T& val) : data(val), holds_data(true) {} // 析构时处理资源(如果T是非平凡类型) ~UnionTemplate() { if (holds_data) { data.~T(); } } };
- 这里
std::monostate的核心作用就是提供一个无副作用、可默认构造的占位符,解决了union成员无法同时满足所有模板参数默认构造要求的问题。
内容的提问来源于stack exchange,提问作者jcarpenter2
相关产品推荐
相关产品推荐

