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

[STL] Tablica asocjacyjna dowolnych typów.

Ostatnio zmodyfikowano 2013-07-29 23:05
Autor Wiadomość
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?
P-89008
Elaine
» 2013-07-29 19:05:54
Do czego ci to potrzebne?
P-89028
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?
P-89029
MrPoxipol
» 2013-07-29 19:12:06
boost::any jak co i sczerze mówiąc były już takie tematy na forum.
P-89030
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.
C/C++
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()
{
    //costamcostam
    //...
    //petla glowna
    while(...)
    {
        //wykonywanie komend jezyka skryptowego
        if( komenda.type == komenda_print_player_info )
        {
            wyswietl( myPlayer.getAttribute < odpowiedni_typ >( komenda.value ) ); //
        }
       
        ///////////////////////////////////////
    }
   
}
Pisane z palca.
P-89031
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ć?
P-89032
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:
C/C++
class CPlayer
{
    Vector2 m_Pos,
    m_Hp,
    m_Energy;
   
    Texture m_Texture;
public:
    //functions
};
I definicje:
C/C++
#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:
C/C++
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.
P-89036
jankowalski25
» 2013-07-29 23:05:59
C/C++
std::vector < void *> m_Members;
m_Members.push_back( & zmienna );
P-89037
« 1 »
  Strona 1 z 1