Überprüfen Sie, ob eine Instanz der Basisklasse eine von einigen abgeleiteten Klassen ist
Posted: 15 Jan 2025, 18:15
Ich habe eine Klasse Base und sie hat viele abgeleitete Klassen: Derived1, ...,.
Gibt es bei einer gegebenen Instanz Base* b eine saubere Möglichkeit, zu überprüfen, ob b eine Instanz von entweder Derived1 ist , ...,?
Der naheliegende Weg besteht darin, jeden einzelnen davon zu überprüfen:
Das scheint sich unnötig zu wiederholen.
Idealerweise würde ich gerne so etwas machen wie:
Gibt es eine Möglichkeit, so etwas zu erreichen?
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.
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.