Warunki z typeid
Ostatnio zmodyfikowano 2015-05-07 16:12
TheReclif Temat założony przez niniejszego użytkownika |
Warunki z typeid » 2015-05-04 22:23:04 Witam! Ostatnio napisałem metodę, która miała ną podstawie typu przypisać wartość jednego z argumentów odpowiedniej składowej. Kod: template < typename type > void taskMgr::setArg( type arg, string context ) { if( typeid( arg ) == HCURSOR ) { cursor = arg; return; } if( typeid( arg ) == HICON ) { icon = arg; return; } if( typeid( arg ) == LPCSTR ) { if( context == CONTEXT_WINDOW_NAME ) { winName = arg; return; } } if( typeid( arg ) == systemSettings ) { winSetts = arg; return; } }
Kompilator wywala przy tym kodzie błędy. Czy to, co pragnę zrobić można napisać bez błędów? |
|
DejaVu |
» 2015-05-04 23:00:33 Logi kompilacji się wkleja... http://en.cppreference.com/w/cpp/language/typeidSprawdź: template < typename type > void taskMgr::setArg( type arg, string context ) { if( typeid( arg ) == typeid( HCURSOR ) ) { cursor = arg; return; } if( typeid( arg ) == typeid( HICON ) ) { icon = arg; return; } if( typeid( arg ) == typeid( LPCSTR ) ) { if( context == CONTEXT_WINDOW_NAME ) { winName = arg; return; } } if( typeid( arg ) == typeid( systemSettings ) ) { winSetts = arg; return; } }
|
|
Monika90 |
» 2015-05-05 09:23:10 Tak się nie da tego zrobić, a to dlatego, że C++ jest językiem ze statyczną kontrolą typów. C++ to nie Python. Można uzyskać efekt o jaki Ci chodzi przeciążając funkcję: void setArg( HCURSOR arg, string context ); void setArg( HICON arg, string context ); void setArg( PCSTR arg, string context ); void setArg( systemSettings arg, string context );
|
|
kubawal |
» 2015-05-05 17:46:16 @up albo specjalizując szablon. /edit: Poza tym wszystkie windowsowe Hcośtam sprowadzają się do HANDLE czyli do PVOID czyli do void *Czyli HCURSOR, HICON itd. to tak naprawde te same typy więc nie można przeciążyć dla nich funkcji ani wyspecjalizowac szablonu Gdyby tak się dało w C++... |
|
pekfos |
» 2015-05-05 19:50:12 Poza tym wszystkie windowsowe Hcośtam sprowadzają się do HANDLE czyli do PVOID czyli do void * |
Nie. |
|
kubawal |
» 2015-05-06 15:48:45 @up Sprawdź na msdn |
|
Monika90 |
» 2015-05-06 17:30:04 No tak, akurat HICON i HCURSOR to ten sam typ. Ale większość uchwytów to jednak różne typy. |
|
Fireho |
» 2015-05-06 18:11:49 @kubawal @Monika90 HICON i HCURSOR mogą być tym samym typem, ale nie muszą - zależy to od obecności jakiegoś makra _MAC . Ale fakt, reszta uchwytów to zupełnie różne typy. |
|
« 1 » 2 |