如何解决如何编写联合类型的扣除指南
假设我们有这个模板用于结构体和相同大小的字节数组的联合
template<typename T>
union point {
struct { T x,y; } coord;
static constexpr size_t buffer_size = sizeof(coord);
unsigned char buffer[buffer_size];
};
我们希望在 C++17 之后的客户端代码中使用 CTAD 和聚合初始化
auto p1 = point { .coord = { 0.1,0.2 } };
auto p2 = point { .coord = { 1,2 } };
编译器希望我们提供 point
类型的推导指南。在联合类型的情况下如何定义?
解决方法
演绎指南基于构造函数,可以是由显式演绎指南创建的假设性构造函数,也可以是实际存在的构造函数。指定初始化器是聚合初始化的一种形式,只有没有构造函数的类型才能成为聚合。
虽然这可能仍然允许显式推导指南,但只有在列表初始化语法可以选择构造函数时才有效。但是包含指定初始化器的花括号初始化器列表不能选择构造器。
简而言之,您不能将指定初始化器和 CTAD 结合使用。完全没有。
请注意,您通常可以将 CTAD 与联合一起使用,但这需要编写构造函数并可能使用标记分派来指定每个构造函数初始化哪个成员。问题来自尝试将联合初始化为聚合。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。