Shade Of Mine schrieb:
Selbes gilt für Variablen, Funktionen, etc.
Das macht keinen Sinn. Doppelte Klassen anlegen zu können ist keine relevante Fehlerquelle.
Ich sehe ja nicht unbedingt das Anlegen von doppelten Klassen als Fehlerquelle, sondern die falsche Verwendung von deinem Makro. Gerade folgende Aussage verleitet mich zu diesem Gedanken:
Shade Of Mine schrieb:
Das hat zB auch den vorteil dass ich jederzeit und überall eine neue exception klasse anlegen kann - ...
Das klingt für mich ca. so:
Jederzeit und überall, schnell und einfach und ohne sich viel Gedanken zu machen, kann man sich eine Exceptionklasse anlegen.
Wenn ich eine Klasse explizit anlege, dann überlege ich mir jedesmal ganz genau, wie die jetzt benannt werden soll, in welchem Namensraum sie liegt und sorge dafür, dass es keinen Namenskonflikt gibt. Bei deiner Lösung mit dem Makro, kann es schnell passieren, dass man diese Sorgfalt vernachlässigt. Die Einfachheit des Makros ist die Fehlerquelle.
Vielleicht bin ich aber auch ein wenig zu vorsichtig (Paranoia vor Einfachheit)
Hab bisher einfach die Erfahrung gemacht, dass wenn etwas einfach wirkt, die Leute nicht mehr nachdenken. Sie vergessen, dass da grundsätzlich eine Klasse deklariert und definiert wird. Dadurch vergessen sie auch, dass der Name eindeutig sein muss.
Dann machen die Leute dann sicher auch solche Dinge:
// x.cpp
IMPLEMENT_EXCEPTION_2(foo, ...);
// ...
throw foo();
// y.cpp
IMPLEMENT_EXCEPTION_2(foo, ...);
// ...
try
{
// ...
}
catch(foo const& err)
{
// ...
}
-> kompiliert ....
Nur wird der Linker wohl etwas dagegen haben
Gut, gegen Dummheit kann man nichts machen, aber man kann zumindest probieren vorzubeugen.
Bin ich da jetzt zu vorsichtig? ...
Grüssli