Überprüfen Sie, ob eine Instanz der Basisklasse eine von einigen abgeleiteten Klassen ist

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Überprüfen Sie, ob eine Instanz der Basisklasse eine von einigen abgeleiteten Klassen ist

by Guest » 16 Jan 2025, 07:06

Ich habe eine Klasse Base und sie hat viele abgeleitete Klassen: Derived1, ...,

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
Das scheint sich unnötig zu wiederholen.
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;
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.

Top