Ich würde gerne wissen, was in meiner Situation besser ist und warum. Zunächst einmal habe ich gehört, dass die Verwendung von RTTI (typeid) schlecht ist. Kann mir jemand erklären, warum? Wenn ich die Typen genau kenne, was ist falsch daran, sie in einer Laufzeit zu vergleichen? Gibt es außerdem ein Beispiel für die Verwendung von boost::type_of? Ich habe beim Durchsuchen des mächtigen Google keines gefunden :) Eine andere Lösung für mich ist die Spezialisierung, aber ich müsste mindestens 9 Typen einer neuen Methode spezialisieren. Hier ist ein Beispiel, was ich brauche:
Ich habe diese Klasse
template<typename A, typename B, typename C>
class CFoo
{
void foo()
{
// Some chunk of code depends on old A type
}
}
Also muss ich eher in typeid überprüfen (was ich gehört habe, ist BAD) und diese 3 Realisierungen in Beispiel wie machen:
void foo()
{
if (typeid(A) == typeid(CSomeClass)
// Do this chunk of code related to A type
else
if (typeid(B) == typeid(CSomeClass)
// Do this chunk of code related to B type
else
if (typeid(C) == typeid(CSomeClass)
// Do this chunk of code related to C type
}
Was ist also die beste Lösung? Ich möchte nicht für alle A, B, C zu spezialisieren, weil jeder Typ 3 Spezialisierungen hat, so dass ich 9 Methoden oder nur diese typeid Prüfung erhalten.