Forum » Programiranje » [c++] Heterogeni kontejner
[c++] Heterogeni kontejner
zhigatsey ::
Živjo,
V std::list bi rad spravil vrednosti različnih tipov. To sem naredil tako, da je razred Value dedovan iz razreda ValueBase,
katerih kazalce lahko pomečem v kontejner.
Problem oz. grdo se mi zdi pridobivanje vrednosti iz kontejnerja...
Kar me zanima je samo vrednost spremenljivke m_value, katero pa lahko
dobim samo s castanjem (recimo metodi getValueAsString(), getValueAsInt() )...
Ali bi lahko kako določil dejanski tip kazalca ValueBase* brez kupa if stavkov z dynamic_cast za vsak tip posebej...
Ali bi tukaj lahko uporabil novo funkcionalnost c++0x -> (auto-typed variables)
Ali je še kakšna druga alternativa glede tega...
Hvala za odgovore
V std::list bi rad spravil vrednosti različnih tipov. To sem naredil tako, da je razred Value dedovan iz razreda ValueBase,
katerih kazalce lahko pomečem v kontejner.
class ValueBase { public: virtual std::string getValueAsString() = 0 const; virtual int getValueAsInt() = 0 const; ... ... }; template<class Type> class Value : public ValueBase { public: Value(const Type& value) : m_value(value) {} const Type& getValue() const { return m_value; } void setValue(const Type& value) { m_value = value; } virtual std::string getValueAsString() const { return convert<Type, std::string>(m_value); -- convert je podobna funkcija kot lexical_cast (uporablja se stringstream) } virtual int getValueAsInt() const { return convert<Type, int>(m_value); } private: Type m_value; }; ................................................ std::list<ValueBase*> values; Value<int> stevilo(2); Value<std::string> niz(std::string("bla bla")); values.push_back(&stevilo); values.push_back(&niz);
Problem oz. grdo se mi zdi pridobivanje vrednosti iz kontejnerja...
Kar me zanima je samo vrednost spremenljivke m_value, katero pa lahko
dobim samo s castanjem (recimo metodi getValueAsString(), getValueAsInt() )...
Ali bi lahko kako določil dejanski tip kazalca ValueBase* brez kupa if stavkov z dynamic_cast za vsak tip posebej...
Ali bi tukaj lahko uporabil novo funkcionalnost c++0x -> (auto-typed variables)
Ali je še kakšna druga alternativa glede tega...
Hvala za odgovore
3p ::
Ali bi lahko kako določil dejanski tip kazalca ValueBase* brez kupa if stavkov z dynamic_cast za vsak tip posebej...
Ko bi neposredno določil dejanski tip, bi pa verjetno spet potreboval kup if stavkov?
Ne verjamem, da boš bistveno pametneje rešil tole z vstavljanjem in jemanjem svojih objektov iz seznama. Če pa boš povedal, kaj hočeš s tem dejansko deseči, pa bo mogoče kdo prispeval kako idejo, kako se stvari drugače lotiti.
Ena bolj osnovnih je pač ta, da se vprašaš, kaj dejansko s temi zadevami, ki jih daješ v seznam počneš (najbrš pretvorba ni cel smisel). Potem pač denimo kar na ta osnovno razred obesiš virtualno metodo, ki to zadevo opravi, in jo overridaš v izpeljanih razredih. Iz seznama dobiš sicer kar ValueBase, ampak te nič ne briga, ti samo pokličeš valueBase.NarediXXX()...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ rabim pomoč konstuktorjiOddelek: Programiranje | 1095 (790) | Snowflake2 |
» | [WPF] Vrednost Textbox kot "angle" v AxisAngleRotation3DOddelek: Programiranje | 779 (714) | saule |
» | Največje računalniške napake v zgodoviniOddelek: Novice / Znanost in tehnologija | 15960 (12587) | MrStein |
» | [C++]Instanca razredaOddelek: Programiranje | 1540 (1431) | Senitel |
» | [C++] Pretvorba iz int v char *Oddelek: Programiranje | 2957 (2333) | Gundolf |