erklären Weiterleiten einer öffentlichen typedef Klasse in C ++
-
08-07-2019 - |
Frage
Ich versuche, eine Reihe von Header-Datei „enthält Spaghetti“ zu vereinfachen, indem Vorwärtsdeklarationen verwendet und #includes in die Implementierungsdatei zu bewegen. Allerdings habe ich immer auf das folgende Szenario kommen:
//Foo.h
#include "Bar.h"
class Foo
{
public:
void someMethod(Bar::someType_t &val);
};
//Bar.h
.
.
.
class Bar
{
public:
typedef std::vector<SomeClass> someType_t;
};
Ich möchte #include „bar.h“ in so viele Fälle wie möglich entfernen. Ich sehe auch die Situation, in der typedef in bar.h außerhalb der Bar-Klasse aufgeführt. Ich gehe davon aus können beide Situationen in der gleichen Weise behandelt werden.
Irgendwelche Ideen?
Lösung
Du hast leider nicht viele Möglichkeiten und keine ist perfekt.
Zunächst werden die beiden offensichtlich und nicht akzeptabel Lösungen:
- Sie können weiterleiten die
typedef
erklären, die völlig verfehlt den Zweck, einetypedef
zu verwenden. - Sie schließen die Datei, die die
typedef
enthält, die Sie vermeiden möchten.
Die interessanteren Lösungen:
- Haben Sie alle damit verbundenen
typedef
s in derselben enthalten und umfassen diese Datei. Dies schafft Code Kopplung zwischen den Klassen though. Sie sollen sie, dass nur mit verwandten Klassen tun, was Sie mit einem Gott am Ende gehen zu Include-Datei und diese zu viel neu zu kompilieren führen könnte, wenn Sie einetypedef
zu dieser Datei hinzufügen. - Für jede Klasse hat eine separate mit dem
typedef
s darin enthalten. Art ärgerlich, aber es funktioniert.
Die letzten beiden sind wie vorwärts Erklärungen zu tun, sondern mit zusätzlichen typedef
s. Sie reduzieren die Datei Interdependenzen, da Sie selten die typedef-Datei zu ändern.
würde ich für die meisten Situationen sagen, die zentrale umfassen den größten Nutzen für Ärger hat. Nur vorsichtig sein.
Andere Tipps
Just class Bar;
verwenden. Das sagt C ++ Sie Ihre Absicht, sind erklärt Bar zu definieren.