Wie kann ich dieses Makro ersetzen?
-
Zu Testzwecken habe ich eine Klasse definiert, die ihre Aufrufe im Klartext protokolliert. Um Schreibfehler und damit Programmfehler zu vermeiden, bin ich auf folgende Lösung gekommen:
//...
#define ACTION(function_name) \
virtual void function_name(void) \
{ \
this->action_history.push_back(#function_name); \
}class MockContext : public Context
{
public:
typedef std::vectorstd::string action_vec;MockContext(void);
virtual ~MockContext(void);ACTION(doA);
ACTION(doB);
ACTION(doC);
ACTION(doD);
//... und noch viele mehrvirtual bool compareAndClear(action_vec &actions);
virtual void clearHistory(void);
virtual void printHistory(void);private:
action_vec action_history;
};//...
Das funktioniert wie gewünscht. Allerdings werden Makros in C++ ja als Bäähh angesehen. Meine Frage ist deshalb:
Wie macht man das ohne das Makro?
Vielen Dank für Eure Hinweise.
-
Mock udn Vererbung scheint mir schlimmer.
Was spricht dagegen, die Implementierung con Context anzufassen und da in jede Methode als erste Zeile einen log-Befehl reinzuschreiben?
-
volkard schrieb:
Mock udn Vererbung scheint mir schlimmer.
Was spricht dagegen, die Implementierung con Context anzufassen und da in jede Methode als erste Zeile einen log-Befehl reinzuschreiben?Was dagegen spricht? Alles!
Es geht um das Makro und nicht um die Klasse.
(Im Übrigen ist Context abstrakt. Was sonst? Das logging hat dort prinzipiell nichts verloren. Punkt.)
-
Du proggerst prinzipiell Java. Komma.
Fürs Debuggen und Loggen so sind Makros übrigens ok. Zum Codebauen eher nicht, naja, bist bei Deinem Plan hart an der Grenze (und für meinen Geschmack schon auf der falschen Seite).
-
volkard schrieb:
Du proggerst prinzipiell Java. Komma.
Fürs Debuggen und Loggen so sind Makros übrigens ok. Zum Codebauen eher nicht, naja, bist bei Deinem Plan hart an der Grenze (und für meinen Geschmack schon auf der falschen Seite).
Nach wie vor: Thema verfehlt.
-
Du solltest () statt (void) schreiben und darfst this-> weglassen.
-
@TDDler: So, genug getrollt für heute. Falls dein letzter Beitrag (den ich gelöscht habe) ernst gemeint war, solltest du dir erstmal C++-Grundlagen aneignen.