gpt4 book ai didi

c++ - C++ 概念是存在类型的一种形式吗?

转载 作者:可可西里 更新时间:2023-11-01 15:22:31 26 4
gpt4 key购买 nike

我在维基百科 (Existential_types) 上查看存在类型的定义,感觉它在某种程度上类似于 C++ 中的概念(特别是 concepts lite)。

C++ 概念是存在类型的一种形式吗?

如果不是,两者有什么区别?

最佳答案

TL;DR:是的,概念是(或至少允许您定义)存在类型。


这是我的推理,但请注意;我不是类型理论家:

考虑 Wikipedia's definition of abstract data type (强调我的):

In computer science, an abstract data type (ADT) is a mathematical model for a certain class of data types of one or more programming languages that have similar semantics. An abstract data type is defined indirectly, only by the operations that may be performed on it and by mathematical constraints on the effects (and possibly cost) of those operations.

存在类型,如 these 所述two Stack Overflow 问题和您链接的维基百科文章,似乎是一种使用参数化定义对抽象数据类型进行建模的方法。重要的是,这些参数不是结果存在类型的一部分。

另一方面,从表面上看,概念是一种(零种?)或多种类型的谓词,可用于限制模板。除非您考虑 requires 子句,否则它们与存在类型之间的关系并不明显。

基本上,requires 允许您测试类型的某些属性。其中包括它们是否定义了特定的成员类型、是否具有特定的成员函数、是否可转换为特定的类型等。这种观察(实际上是设计的要点)是问题所在。

至少在我看来,概念的根本是定义抽象数据类型的机制。这是我们开始看到与存在类型的相似之处:它们通过参数化对 ADT 进行建模,更重要的是,允许您定义 ADT 而不公开参数

Container 概念为例。您可以使用 Concepts Lite 编写类似的内容

void print (Container c) {
for (const auto& e : c)
print (e);
}

// Later
print (std::vector <int> {1, 2, 3, 4});

这是有效的,因为存在一些类型I,这样表达式begin (c)end (c) 返回类型为 I 的对象,以及 Container 的其他约束。那是存在量化; Container 是一种存在类型。

关于c++ - C++ 概念是存在类型的一种形式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22950041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com