Ich frage mich, warum ein Aufruf an eine statische Funktion mehrdeutig ist, auch wenn einer der beiden offensichtlich unmöglich ist, zu rufen, wie es privat ist. Ich hatte gehofft, ich könnte private/geschützte Vererbung verwenden, um den Compiler zu helfen, die Mehrdeutigkeit zu lösen.Warum löst die private Vererbung keine Mehrdeutigkeit für statische Funktionen auf? (getestet in MSVC)
Ist es spezifisch für MSVC oder ist es irgendwie im Standard spezifiziert?
struct A
{
static int num() { return 0; }
};
struct B
{
static int num() { return 1; }
};
struct C : public A, private B
{};
int main()
{
C::num(); // Ambiguous access of num
}
Der Hintergrund ist, dass ich durch vererben es eine Möglichkeit der Wiederverwendung eine Überlastung Verhalten (das in A) in vielen abgeleiteten Klassen (C, D, E, F, G) versuchen, zu halten irgendwie eine Regel von Do not Repeat Yourself.
Zugriffskontrolle * nach * Überladungsauflösung erfolgt –