什么是C23“_Either”类型?

hlswsv35  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(155)

C23 proposal n3003n2366分别在第一页和第七页提到了一个建议的_Either类型,到目前为止我还没有找到任何其他的引用。据我所知,它既没有在C23 working draft中提到,也没有在任何other C23 proposals中提到。
_Either看起来像是一个类似于Rust枚举的sum类型。我想它是一个编译时构造,它迫使程序员在任何时候都要检查左类型和右类型的情况。有没有我错过的_Either的内容?有没有人知道_Either到底是什么以及它是如何实现的?

vmdwslir

vmdwslir1#

什么是C23 _Either类型?
目前还没有正式提出C.这似乎是WG21(C++)参与者的想法,但我认为C++也没有正式提出过这样的想法。
看起来这是相关的讨论文档:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf。它没有提供_Either的实际规范,但它使用符号_Either(A, B),用于类型AB,以表示可以包含(或 * 是 *)AB的类型,并且以某种方式指示任何给定示例确实包含其中的哪一个。例如,这可能被实现为一个有区别的并集,或者该文档建议它也可能完全由实现来决定,类似于va_args
这与C23提案n3003和n2366有关,因为它们涉及泛型类型和(兼容的)类型重定义,这可能与实现_Either()有关。

相关问题