Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamic Cast i sprawdzenie typu obiektu

Ostatnio zmodyfikowano dzisiaj: 12 min
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
Dynamic Cast i sprawdzenie typu obiektu
» 2025-10-23 18:40:42
Witam. Mam problem z kodem. Próbuję sprawdzać typ obiektu i jeżeli jest dany to wykonać instrukcję i przerwać ifa. Chciałbym coś zrobić jak break.. Tylko jak ?

C/C++
if( _currentOnTabElement >= 0 ) {
   
TextInput * ti = dynamic_cast < TextInput * >( _onTabElements[ _currentOnTabElement ] );
   
if( ti != nullptr ) {
       
ti->_state = TextInputState::Idle;
   
}
   
   
Button * btn = dynamic_cast < Button * >( _onTabElements[ _currentOnTabElement ] );
   
if( btn != nullptr ) {
       
btn->unselect();
   
}
}

Pewien sposób znalazłem - to znaczy wrzucić to w funkcję i przypisywać returny ale co gdybym nie chciał tworzyć osobnej funkcji ?
P-183226
nanoant20
» 2025-10-23 20:13:01
only code refactoring
P-183228
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-23 20:19:08
Mhm.. nie rozumiem ?
Zrobiłem jednak nową funkcję z returnem ...

C/C++
void Dialog_Import_Animation::deactivateOnTabElement() {
   
if( _onTabElements.size() == 0 )
       
 return;
   
   
if( _currentOnTabElement < 0 )
       
 return;
   
   
TextInput * ti = dynamic_cast < TextInput * >( _onTabElements[ _currentOnTabElement ] );
   
if( ti != nullptr ) {
       
ti->_state = TextInputState::Idle;
       
return;
   
}
   
   
Button * btn = dynamic_cast < Button * >( _onTabElements[ _currentOnTabElement ] );
   
if( btn != nullptr ) {
       
btn->unselect();
       
return;
   
}
}
P-183229
nanoant20
» 2025-10-23 20:22:00
dobrze zrozumiałeś, można też przenieść było logikę do osobnej funkcji
P-183230
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-23 20:23:07
ok. to tak zrobiłem. Dzięki! :-)
P-183231
skovv
» 2025-10-24 13:51:03
Class klasa { int type; }

#define klasaa 1
#define klasab 2
Class a : public klasa{
A(){ type = klasaa; }
}
Class b : public klasa{
A(){ type = klasab; }
}

...
Klasa* o = ...
If(o->type == klasaa) {
a* obj = static_cast<a*>(o);
}
Else if(o->type == klasab)
b* obj = static_cast<b*>(o);
P-183234
skovv
» 2025-10-24 13:51:48
Jak dla mnie najlepszy, przejrzysty sposób. Robisz inspektor? :DD
P-183235
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-24 13:56:14
Robię obsługę przełączania Elementów GUI poprzez naduszenie klawisza Tab :-)
P-183236
« 1 » 2
  Strona 1 z 2 Następna strona