Ich kenne zwei Möglichkeiten zur Deklaration nicht-nested-Klasse in einem Klassenkörper.Wie forward-deklarieren nicht angebrochenen Klasse in einem Klassenkörper ohne Freundschafts- oder Deklaration von Zeiger
Zunächst ist:
class A
{
friend class B; // B is forward-declared + friend
};
Und das zweite ist:
class A
{
class B* ptr; // B is forward-declared + pointer
};
Es ist möglich, eine Klasse außerhalb der Klasse Körper voraus erklären, aber für bestimmte Grund lassen Sie uns über diese Option vergessen;
So würde Ich mag möglich machen, so Mitglied zu erklären:
class A
{
/* somehow declare B in the body*/
B* getInstanceB();
};
Es lohnt sich zu erwähnen, dass: mit einem Zeiger erklärt:
class A
{
class B* pointer;
B* getInstanceB(); //fine
};
Mit Freund Erklärung:
Ich bedauere zutiefst, dass es keine solche Vorwärts-Deklaration Syntax gibt wie:
class ::[optional-namespace::]ClassName
;
, die die Vorwärts-Deklaration der verschachtelten Klasse von der Vorwärts-Deklaration der Nicht-Nested-Klasse unterscheiden würde. Ist es möglich, dies auf andere Weise im aktuellen Standard zu tun?
Was ist los mit nach vorn 'B' außerhalb von 'A' erklären? – erenon
@erenon Es ist nichts falsch. Aber wenn es eine andere Möglichkeit gibt, würde ich es gerne wissen :) – xinaiz
Lass mich das bekommen.Sie versuchen herauszufinden, ob es eine andere Lösung für ein Problem gibt, wenn es eine bestehende Lösung gibt, und es funktioniert gut. –