Mehrdeutiger Zugriff auf die Memberfunktion der Basisklassenvorlage

8

In Visual Studio 2008 kann der Compiler den Aufruf von SetCustomer in _tmain unten nicht auflösen und unmissverständlich machen:

%Vor%

Dies ist der Kompilierungsfehler:

%Vor%

Ich dachte, der Template-Argument-Lookup-Mechanismus wäre schlau genug, um die korrekte Basis Producer abzuleiten. Warum nicht?

Ich könnte das umgehen, indem ich Producer zu

ändere %Vor%

und rufen Sie SetConsumer als

auf %Vor%

aber es wäre schöner, wenn ich nicht müsste ...

    
Johann Gerell 26.04.2010, 11:51
quelle

2 Antworten

13
  

Ich dachte, der Template-Argument-Lookup-Mechanismus wäre schlau genug, um den richtigen Base-Producer abzuleiten.

Das hat nichts mit Templates zu tun, es kommt von der Verwendung mehrerer Basisklassen - die Namenssuche ist bereits mehrdeutig und die Überladungsauflösung findet erst danach statt.

Ein vereinfachtes Beispiel wäre das folgende:

%Vor%

Problemumgehungen qualifizieren den Aufruf explizit oder führen die Funktionen in den abgeleiteten Klassenbereich ein:

%Vor%     
Georg Fritzsche 26.04.2010, 12:10
quelle
2

Sie können in Ihrem Funktionsaufruf nur explizite Qualifikationen verwenden. Statt:

%Vor%

versuchen:

%Vor%     
Gorpik 26.04.2010 12:04
quelle

Tags und Links