我正在阅读 Bjarne Stroustrup 的迷你论文“简化概念的使用”,我遇到了以下片段(第 9 页),我在下面复制了该片段:
concept ABx<typename T> { void a(T&); void b(T&); }; concept Ax<typename T> { void a(T&); };
显然,每个类型都是 an
ABx
也是Ax
,所以:template<Ax T> void f(T); template<ABx T> void f(T t); void h(X x) // X is a type for which a(x) is valid { f(x); // ambiguous }
换句话说,一般来说,我们必须防止
ACx
's [原文如此]与'sa()
不同。如果这两个s 可以不同,我们不能接受上面的调用,因为它会调用“错误”。</p>Ax
a()
a()
g(t)
a()
我很难理解这个例子;特别是,我不明白最后的讨论。
- Bjarne 的意思是
ABx
而不是ACx
?(我标记的地方[原文如此]) - Bjarne 的意思是说那是
X
一种有效的类型吗?如果 only是有效的,那么我认为不应该适用,所以没有歧义。a(x)
b(x)
a(x)
template<ABx T> void f(T t);
- 当 Bjarne 声称这两种
a()
实现可能不同时,我不知道他是什么意思。它们不必相同吗?
我确信 Bjarne 的示例是正确的,但我对 C++ 概念的了解还不够。如果有人可以启发我,我会很高兴。