为了简单起见,在重载解析过程中:
首先,所有没有约束条件是可行的,但约束条件不满足的函数都被认为是不可行的。
因此,可行重载集包含函数、模板函数和满足约束的约束模板函数。
例如:
template <Concept1 T> foo(T&&);
template <Concept2 T> foo(const T&);
template <Concept3 T> foo(const T&);
void g(){
int i=10;
const int& j =i;
foo (j) // the compiler will check the 2 last foo
//to see if one is more constrained than the other
foo (i) //the first foo is selected even if the second or third foo could look like they are more constrained
}
如果编译器能够证明,对于任何可能的模板参数集,如果满足T1的约束,则满足T2的约束,则模板T1的约束比模板T2的约束更大。它检查是否可以证明:
constraints of T1 statisfied ==> constraints of T2 satisfied
其中==>
表示暗示。
在cppreference上,有一个示例定义了概念。我复制了下面的示例: 这个概念对许多用途都有意义。在这些情况下,类型的对象上的哈希函数是专门化。但是,出于我的目的,我不想假设哈希将是。我希望用户能够提供一个不同的哈希函数。 由于和绑定得如此紧密,所以我不认为可以为和定义单独的概念。那是正确的吗?因此,我想定义一个概念,它同时处理和。 null
根据最近科隆ISO C++会议上的reddit报告,在即将发布的标准中,我们将能够指定模板的概念,并且对于每个类/函数模板,我们将能够设置对其类型的约束。然而,在文档和教程中(例如这里),我找不到多类型用例的正确语法。 但它们都抛出语法错误。我认为答案应该在Bjarne Stroustrup的规范P0557中的某个地方,但我很快就找不到了。
我正在寻找将以下内容标记为错误的规则: 我想在正文中有多个语句时强制换行,因此这应该是正确的: 哪些规则适用于此?我好像找不到。我确实希望继续允许返回单行程序(例如,
我正在学习TypeScript,目前正在尝试创建一个通用排序函数。 我有两个接口: 而我现在的函数看起来是这样的: 上面的代码工作,但我得到警告: 没有与此调用匹配的重载。重载5中的1’(值:字符串|数字|日期):日期),导致以下错误。“T[K]”类型的参数不能分配给“string | number | Date”类型的参数。类型“T[keyof T]”不可分配给类型“string | numbe
对于概念,提供了很好的语法,如