Friend class

Hi Ich habe folgendes wirres konstrukt

template class Bim
{
friend class Bam; //???

};

template class Bam
{

};

frage1: ist es in template klassen möglich eine andere templateklasse zu einer befreundeten zu erklären?

frage2: wenn ja, wie würde dann der syntax der friend anweisung aussehen, da einfach nur friend class Bam (verständlicher weise) nicht geht.

danke kai

Hallo Kai!

Eine sehr interessante Frage! Ich habs gleicheinmal ausprobiert und bin zu meiner Überraschung daraufgekommen, dass es nicht nur mit einer Typspezialisierung funktioniert sondern eine Templateklasse unspezifiziert als friend angegeben werden kann!

Folgender Source hat bei mir unter einem Ms Visual C++ 6 Compiler funktioniert:

_template class B1
{
Y k, l;
};

template class B2
{
Y k, l;
};

template class A
{
X i, j;

friend B1;
friend B2;
};

void funktion()
{
A a;
}_

Ich Nachhinein ist es mir natürlich klar. Warum sollte es denn auch nicht gehen? Die unspezifizierte Version funktioniert einfach für alle Spezifizierungen…

Ein gute Frage! Hoffe auf richtige Antwort,
KoRn!

Hallo,

ich hab mich auch rangemacht die Frage zu beantworten. Nur damit mein Code nicht verkümmert:

#include 

template class B; // Vorwärtsdeklaration

template class A {
 T \_t;
public:
// ...
 friend class B;
 A() : \_t(10) {}
};

template class B {
 A a;
public:
 void print() { std::cout b;
 b.print();
}

Das ganze wurde unter GNU/Linux 2.2.16 mit dem gcc 2.95.2 erfolgreich kompiliert.

MfG Daniel

Danke…
…für eure antworten. ich hab das problem inzwischen auch gelöst. ich hab die „vorwärtsdeklaration“ (prototypen) der klassen vergessen. dies war erforderlich, da mein „konstrukt“ aus etlichen templateklassen besteht die kreuz und quer befreundet sind.