Code: Select all
Derived9
Gibt es bei einer gegebenen Instanz Base* b eine saubere Möglichkeit, zu überprüfen, ob b eine Instanz von entweder Derived1 ist , ...,
Code: Select all
Derived5
Der naheliegende Weg besteht darin, jeden einzelnen davon zu überprüfen:
Code: Select all
if (dynamic_cast(b)) return true;
// ...
if (dynamic_cast(b)) return true;
return false
Idealerweise würde ich gerne so etwas machen wie:
Code: Select all
const auto valid_derived_classes = {Derived1,...,Derived5};
for (const auto derived_class : valid_derived_classes)
{
if (dynamic_cast(b))
{
return true;
}
}
return false;
Zum Kontext: Ich möchte die Temperatur vieler Gerätetypen berechnen, und zwar für jedes Gerät sind einige Sensoren zugeordnet. Wenn alle einem Gerät zugeordneten Sensoren ausfallen, sollte es anhand einiger Notfallsensoren die Temperatur messen. Es gibt einige Gerätetypen, bei denen dies nicht der Fall sein sollte. Wenn ich also die Temperatur berechne, muss ich prüfen, ob ein Gerät außergewöhnlich ist.