Wie kann eine Methode auf private Member anderer Vorlagenklasseninstanzen zugreifen?

8

Dieses extrem minimale Beispiel kann nicht kompiliert werden, da A<int> nicht auf das private Mitglied i in A<double>

zugreifen kann %Vor%

Ich weiß, dass ich alle Vorlagenexemplare zu Freunden machen kann (siehe: Wie kann man auf private Member anderer Template-Klassen-Instanzen zugreifen? ), aber da ich nur eine Methode habe, die den Zugriff erfordert (wie im Beispiel) würde ich die Freundschaft lieber auf beschränken diese Methode. Ist das möglich?

    
DarioP 17.10.2014, 09:59
quelle

2 Antworten

8

Ja, das ist möglich. Mitgliederfunktionen können normalerweise als Freunde bezeichnet werden.

%Vor%

Live-Beispiel (gcc one Ideone)

Beachten Sie, dass im Gegensatz zu gcc clang den Code zurückweist . Ich kann jedoch nichts im Standard finden, das es ungültig machen würde.

    
Angew 17.10.2014, 10:06
quelle
6

Es sieht so aus, als ob die Funktion "friend member" funktioniert, funktioniert Folgendes nicht auf clang :

%Vor%

während funktioniert es auf gcc .

Das Problem scheint ein Clang-Problem bei der Darstellung einer Freundesklassenvorlage zu sein, für die der abhängige Namensspezifizierer im AST nicht aufgelöst werden kann: Ссылка (zum Zeitpunkt des Schreibens noch im Kofferraum).

Daher könntest du für die obige Version der Member-Funktion gehen, obwohl es möglicherweise nicht klappt, bis das herausgefunden ist.

Eine Plan-B-Lösung ist es, eine Freundes-Template-Friend-Funktion zu haben, obwohl es möglicherweise nicht das ist, was Sie wollen (sowohl von cand und gcc akzeptiert):

%Vor%

Beispiel

    
Marco A. 17.10.2014 10:03
quelle

Tags und Links