2012-04-10 4 views
3

Ich habe eine Klasse, die aus ein paar Funktionen und vielen Operatoren besteht. Fast alle Funktionen und Operatoren verwenden Vorlagen, weshalb ich sie in der Header-Datei implementiert habe. Das machte es ziemlich schwer, etwas im Code zu finden, also entschied ich mich, alle Operatoren in ein separates Headerfile zu verschieben.Ist es in Ordnung, Klassen in mehrere Header-Dateien zu teilen?

jetzt habe ich so etwas wie:

fstring.h

class fstring{ 
    ... 
    #include "fstring_operators.h" 
} 

und fstring_operators.h

... 
template<int RSIZE> 
bool operator==(const fstring<RSIZE>& rhs) const { 
    return equals(rhs._chars, RSIZE); 
} 
... 

Ist es in Ordnung, so etwas zu tun? Ich habe auch Header-Wächter für fstring_operators.h weggelassen, da es nirgendwo außer in fstring.h enthalten sein muss

+0

Es ist definitiv möglich, aber kann es schwieriger machen, Ihre Klasse ohne ordnungsgemäße Dokumentation zu verstehen. Zum Beispiel wird es nicht einfach sein, einfach die Klassendeklaration zu scannen, um zu sehen, ob sie eine spezielle Methode oder einen speziellen Operator hat. –

+0

Ich weiß nicht, ob es eine "Best Practice" ist, aber ich denke, es ist in Ordnung und kann dabei helfen, den Code sauberer zu halten. Als allgemeine Regel und nicht auf einen bestimmten Fall zu schauen, wenn Sie es zu viel benötigen, könnte es bedeuten, dass das Design Ihrer Klasse (n) verbessert werden kann. – ShinTakezou

+1

Eine Option besteht darin, die Elementfunktionen einfach innerhalb der Klassendefinition zu deklarieren und sie anschließend zu definieren (entweder in derselben Kopfzeile oder in einer anderen Kopfzeile). Das würde es einfacher machen, die Definition zu finden, ohne zu einer anderen Datei springen zu müssen, und ohne Dateien einzuführen, die nur an bestimmten Orten enthalten sein können. –

Antwort

7

Obwohl ich dies im Produktionscode zuvor gesehen habe, stimme ich nicht wirklich mit diesem Stil aus 2 Gründen :

1) Sie erwarten, dass ein class vollständig in der Kopfzeile definiert ist. Sie sollten nicht in andere Header suchen müssen, um zu finden, wonach Sie suchen.

2) Sie können den anderen Header an anderer Stelle einfügen. Auch ohne Wächter ist es keine Garantie, dass es nicht funktioniert.

4

Ich denke, Sie sollten die Methoden als freie Funktionen definieren. Dann können Sie am Ende Ihrer regulären Header-Datei # einschließen, was eine Praxis ist, die viele C++ - Bibliotheken verwenden (einige von ihnen würden den Dateinamen des Operators auf .i oder .inl oder etwas enden lassen).

Wenn Sie es so machen, scheint es in Ordnung. Die Art und Weise, wie Sie im OP geschrieben haben, ist etwas seltsam, und selbst wenn es funktioniert, könnte es einige Betreuer Ihres Codes und möglicherweise sogar einige Entwicklungswerkzeuge abwerfen.

Verwandte Themen