Template Frissing-Syntax

8

Angenommen, ich habe zwei Vorlagenklassen.

%Vor%

Der obige Code ermöglicht allen Arten von Basisklasse1, alle Arten von baseclass2 , eine Viele-zu-Viele-Beziehung, mit einem Freund zu verknüpfen. Ich habe zwei Fragen,

Was ist die Syntax, um basisklasse1 zu erlauben, nur die Funktion

Freund %Vor%

Und, was ist die Syntax, um baseclass1 einem Freund nur die Funktion

zu erlauben

baseclass2<class D>::foo<class T>( D& x, T& y) wo T von baseclass1 entspricht Der T von Funktion foo .

BEARBEITEN

Für diejenigen, die behaupten, dass Sie eine Template-Spezialisierung nicht kennenlernen können. Dieser Code funktioniert

%Vor%

Bemerken Sie sogar, wo Muffin Freunde das falsche foo, und immer noch einen Kompilierungsfehler verursacht. Dies funktioniert sowohl mit Funktionen als auch mit Klassen. Ich bin absolut bereit zu akzeptieren, dass dies in meiner spezifischen Situation nicht möglich ist (es sieht tatsächlich immer mehr so ​​aus) Ich würde einfach gerne verstehen warum.

    
8bitwide 30.10.2012, 14:52
quelle

2 Antworten

2

Mit allen möglichen Spezialisierungen von baseclass2<D>::foo anzufangen ist ziemlich einfach:

%Vor%

Live-Beispiel.

Eine Vorwärtsdeklaration von baseclass2 (so dass baseclass1 weiß, dass baseclass2 existiert und eine Vorlage ist) und zwei Vorlagen, eine für die Klasse, eine für die Funktion. Dies gilt auch für Out-of-Class-Definitionen für Funktionsvorlagen von Klassenvorlagen. :)

Mit baseclass2<D>::foo<T> anzufangen ist jedoch nicht möglich, oder ich kann nicht finden die richtige Syntax dafür.

Eine Problemumgehung könnte eine globale Funktion sein, die den Zugriff zusammen mit dem Schlüsselwort weiterleitet, aber meh, das ist ein Chaos (imho):

%Vor%

Live-Beispiel.

    
Xeo 30.10.2012, 15:26
quelle
0

AFAIK können Sie alle Instanziierung von foo als Freund angeben, aber keine spezifische Instantiierung:

%Vor%     
BigBoss 30.10.2012 15:17
quelle

Tags und Links