goetz hat geschrieben:
O.K. Solange man aber als einiger an den Progs arbeitet dürfte sich das Problem in Grenzen halten. Bliebe noch die Frage zu klären, ob bei automatischen Variablen in Funktionen/Methoden der Art
Code:
int var[MAX1 + MAX2*LINES2];
der Compiler es in beiden Fällen zur Compilezeit auflöst. Entsprechend, ob der Compiler bei bei const-Variablen einen extra Speicherzugriff hat oder nicht (variable wird aus Speicher geladen, Macro-Konstante steht explizit im Prog-Code. Bei oft Aufgerufenen Funktionen kann das schon mal ein paar % Performance machen/
Ein guter Compiler sollte das optimieren können, da er weiß, daß MAX konstant ist.
goetz hat geschrieben:
Sicher es ist unschön. Und gerne mach ich es auch nicht. Aber wenn ich bei einer rekursiven Funktion jedes if darin checkn muss, seh ich kaum eine andere Möglichkeit als jedes mit einem else zu versehen, dass ich aber im fertigen Code nicht mehr drin haben möchte. Wie ich da mit einer zweiten Klasse ran soll ist mir unklar. Es sei den ich dupliziere die die Klasse eine mit und eine ohne Debug-Code. Dann hab ich aber das Problem,sicher gehen zu müssen, dass alle Änderungen während des Debuggings aus der Debug-Klasse zurück in des "normale" Klasse fliessen.
Bis dann
R"udiger
PS: Ich lerne immer gen dazu, wobi ich nach wie vor noch von C herkomme und recht stark prozedual denke.
Der Gedanke ist es Metaprogramming zumachen.
class Debug {
debugcode();
};
class NoDebug {
debugcode () {};
};
template <typename DebugPolicy = NoDebug>
class Demo {
// normale Klassendefinition
};
typedef Demo<NoDebug> MyDemoType;
bzw.
typedef Demo>Debug> MyDemoType;
kannst Du dann das Debugging an- und ausschalten. In diesem Falle ist debugcode eine Methode die von Demo aufgerufen wird. Wenn man sie leer definiert, wird sie üblicherweise wegoptimiert.
Richtig gut wird das ganze in C++ Templates, Vandervoorde, Josuttis erklärt. Anwendungen von Policy Klassen kann man unter anderem in Modern C++, Alexandrescu finden, beide Bücher von Addison-Wesley/Pearson Education.