[STL] Tablica asocjacyjna dowolnych typów.
Ostatnio zmodyfikowano 2013-07-29 23:05
RazzorFlame Temat założony przez niniejszego użytkownika |
[STL] Tablica asocjacyjna dowolnych typów. » 2013-07-29 17:37:29 Witam, wiem że do tego służy std::map ale raczej nie dokładnie do tego. Chciałbym osiągnąć takie coś jak jest w PHP ale tam nie strzeba podawać typów. Jest jakaś możliwość? A jeśli tak to jaka? |
|
Elaine |
» 2013-07-29 19:05:54 Do czego ci to potrzebne? |
|
pekfos |
» 2013-07-29 19:08:58 W STL takich rzeczy nie ma, ale w boost są. Równie dobrze możesz to sam napisać, nic trudnego. Tylko po co? Nie wymyślasz przypadkiem niestworzonych (w tym przypadku stworzonych) narzędzi, bo nie umiesz rozwiązać problemu normalnie? |
|
MrPoxipol |
» 2013-07-29 19:12:06 boost::any jak co i sczerze mówiąc były już takie tematy na forum. |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2013-07-29 19:41:28 Pekfos i Alueril - niee ale tak mnie natchnęło na zrobienie takiego języka skryptowego a ciągłe zamienianie stringow na składniki klasy byłoby uciążliwe. class GameObiect { AssocTable m_Attr; public: GameObiect( string name ) { m_Attr.addItem( Vector2( 0, 0 ), "position" ); m_Attr.addItem( Vector2( 500, 500 ), "health" ); m_Attr.addItem( Vector2D( 100, 100 ), "energy" ); m_Attr.addItem( name, "name" ); } template < class attrType > attrType getAttribute( string id ) { if( znaleziono ) return m_Attr[ id ]; else { cout << "Odpowiedni komunikat" << endl; return NULL; } } };
int main() { while(...) { if( komenda.type == komenda_print_player_info ) { wyswietl( myPlayer.getAttribute < odpowiedni_typ >( komenda.value ) ); } } }
Pisane z palca. |
|
pekfos |
» 2013-07-29 19:48:50 ciągłe zamienianie stringow na składniki klasy byłoby uciążliwe. |
A kto ci każe ciągle to zmieniać? |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2013-07-29 21:56:10 Dobra może inaczej. Załóżmy że mamy sobie klase CPlayer: class CPlayer { Vector2 m_Pos, m_Hp, m_Energy; Texture m_Texture; public: };
I definicje: #define MEM_POSITION m_Pos #define MEM_HEALTH m_Hp #define MEM_ENERGY m_Energy #define MEM_TEXTURE m_Texture
W miare ulepszania gry, składniki klasy CPlayer sie zmienią i trzeba będzie dodawać nowe definicje. Sposobem który podałem wcześniej można to zrobić za jednym zamachem, tak więc pytam jak można to napisać bo nie mam pojęcia. Wcześniej wpadłem na pomysł zrobienia vectora vectorów. Tyle że to wymaga podania typu. Gdyby można było zrobić w ten sposób: std::vector < std::vector > m_Members; m_Members.push_back( std::vector < typ >() );
Wtedy byłoby to bardzo łatwe do zrealizowania. Jednakże z tego co mi wiadomo nie da sie tak zrobić :( Możliwe że jestem źle poinformowany, więc jeśli można zrobić w sposób powyżej prosze o poprawienie mnie. |
|
jankowalski25 |
» 2013-07-29 23:05:59 std::vector < void *> m_Members; m_Members.push_back( & zmienna ); |
|
« 1 » |