Ich habe ein Objekt, jede Mitgliedsvariable in diesem Objekt hat einen Namen, den ich es durch den Aufruf von get_name() erwerben kann, was ich tun möchte, ist die Verkettung aller Namen der Mitgliedsvariablen in alphabetischer Reihenfolge, dann etwas tun. zum Beispiel:eine Funktion anstelle von Kopieren und Einfügen Programmierung
class CXMLWrapper<class T>
{
public:
CXMLWrapper(const char* p_name) : m_local_name(p_name)
{
}
//skip the get_name(), set_name() and others
private:
string m_local_name;
T m_type_var;
}
class object
{
public:
object() : m_team("team"), m_base("base")
{
}
public:
CXMLWrapper<string> m_team;
CXMLWrapper<string> m_base;
...
}
Ich muss hart Code wie folgt:
object o;
string sign = o.m_base.get_name();
sign += o.m_team.get_name();
brauche ich eine Funktion, dies zu tun, anstatt das Kopieren und Einfügen, wenn das Objekt variiert. Jeder hat eine Idee?
Haben Sie verschiedene Objekte mit verschiedenen Elementvariablen? – doctorlove
Vielleicht können Sie eine Sammlung dafür verwenden? Vielleicht Vektor. Beispiel: Klassenobjekt {/*....*/ vector> einige_vars /*....*/} /*....*/ für (auto & it: o.some_vars {sign + = it. get_name;}) Oder vielleicht Dictionary/map –
Es ist weniger eine Funktion und mehr * Reflektion *. Es gibt Möglichkeiten, ein gewisses Maß an Reflexion in C++ zu bieten, aber wenn Sie ohne es tun können, wäre es am besten. –