4

我正在阅读 Bjarne Stroustrup 的迷你论文“简化概念的使用”,我遇到了以下片段(第 9 页),我在下面复制了该片段:

concept ABx<typename T> {
   void a(T&);
   void b(T&);
};
concept Ax<typename T> {
   void a(T&);
};

显然,每个类型都是 anABx也是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> Axa()a()g(t)a()

我很难理解这个例子;特别是,我不明白最后的讨论。

  1. Bjarne 的意思是ABx而不是ACx?(我标记的地方[原文如此])
  2. Bjarne 的意思是说那是X一种有效的类型吗?如果 only是有效的,那么我认为不应该适用,所以没有歧义。a(x)b(x)a(x)template<ABx T> void f(T t);
  3. 当 Bjarne 声称这两种a()实现可能不同时,我不知道他是什么意思。它们不必相同吗?

我确信 Bjarne 的示例是正确的,但我对 C++ 概念的了解还不够。如果有人可以启发我,我会很高兴。

4

0 回答 0