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
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.
Mit allen möglichen Spezialisierungen von baseclass2<D>::foo
anzufangen ist ziemlich einfach:
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%