W poniższym kodzie nie mogę zrozumieć, dlaczego wywołanie "zastosuj" jest zgłaszane jako niejednoznaczne. Istnieje tylko jedno dopuszczalne dopasowanie dla podanego parametru (A_applicator::apply
). Uwaga: Chciałbym bardzo docenić odniesienia do normy, które pomogłyby mi określić przepływ rozdzielczości, który powoduje tę niejednoznaczność.Dlaczego to połączenie wirtualne jest niejednoznaczne?
struct A { };
struct B { };
struct A_D : public A { };
struct A_applicator {
virtual void apply(A) { }
};
struct B_applicator {
virtual void apply(B) { }
};
struct dual_applicator : public B_applicator, public A_applicator {
};
int main() {
dual_applicator app;
A_D d;
app.apply(d);
}
Masz klasę, która pochodzi z dwóch klas bazowych, które nie zastępują 'apply()'. Połączenie wirtualne, które próbuje przeszukać drzewo dziedziczenia i spełnia dwie lub więcej opcji, jest nieprawidłowe. Masz swoją niejednoznaczność. – CodaFi
Rzeczywiście, zapomniałem o klauzulach "używania". Dziękuję Ci. –