gpt4 book ai didi

c++ - 自引用 C++20 概念

转载 作者:行者123 更新时间:2023-12-01 14:03:55 24 4
gpt4 key购买 nike

以下无效代码的道德等价物是什么?

// Suppose you want to check, as part of a concept,
// if some operation on a type results in a type that models such concept.
// you cannot constrain the resulting type with the same concept
// in the same way you can't have self referential types
// (that would result in recursive definitions)

template<class T>
concept Int = requires(const T& a, const T& b) {
{ a + b } -> Int; // compiler don't know what to do
};

最佳答案

Suppose you want to check, as part of a concept, if some operation on a type results in a type that models such concept.



这就是无限递归。像任何函数递归一样,你必须有一个终止条件。为模板参数定义终止条件的正常方法是通过特化。但是 concept s 显式不能特化,因此不能有终止条件。

这在逻辑上也是不连贯的,因为您试图通过使用您试图定义的事物来编写定义。对于根据定义没有意义的事物,没有“道德等价物”。

你的概念似乎是在说“ T 应该是我可以添加到另一个 T 并产生......”什么?你希望它能够产生一些不相关的类型 U可以添加到另一个 U屈服……再一次,什么?即使忽略那个问题,也应该 U可以添加到 T ?如果是这样,那应该产生什么?

在编写概念时,从用例开始,从决定要执行的操作开始。

关于c++ - 自引用 C++20 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920705/

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