Ich arbeit nun gerade an eine Möglichkeit. Gestern Abend/Nacht als ich ins Bett ging, kamen mir noch ein zwei Ideen.
Zum einen könnte ich die wxWidgets Klassen kapseln, das wären zwar nicht all zu viele, denn meistens brauche ich Labels, Textboxen und ListCtrls, aber wohl doch immernoch ein ziemlicher Aufwand. Deshalb kam mir die Idee, dass ich eigentlich nur die Schnittstellen/Funktionen/Methoden kapseln könnte. Um dem ganzen noch ein einheitliches Bild zu geben (da wxWidgets extrem uneinheitlich ist), füge ich noch ein wenig Templatemetaprogrammierung hinzu.
template<typename FromT, typename ToT>
struct Convert;
template<typename T>
struct Convert<T, T>
{
static T convert(T const& t)
{
return t;
}
};
template<>
struct Convert<std::string, wxString>
{
static wxString convert(std::string const& str)
{
return wxString::FromUTF8(str.c_str());
}
};
// usw.
template<typename ControlT>
struct GetSetControlValue
{
typedef wxString SetType;
typedef wxString GetType;
static void set(ControlT& control, SetType const& val)
{
control.SetValue(val);
}
static GetType get(ControlT& control)
{
return control.GetValue();
}
};
// ... Spezialisierungen ...
template<typename ControlT, typename ValueT>
void set_value(ControlT& control, ValueT const& value)
{
typedef GetSetControlValue<ControlT> GSCV;
GSCV::set(control, Convert<ValueT, GSCV::SetType>::convert(value));
}
So ganz fertig durchdacht ist es noch nicht. Ich überlege mir sogar aktuell, ob ich nicht eine Klasse dazu schreiben soll, welche diesen Datenaustausch noch weiter automatisiert. Wodurch ich am Ende in einer Dialogklasse ein entsprechendes Datenaustausch Objekt initialisiere und dann nur noch jeweils ein Objekt übergeben kann. Dann wird alles korrekt geschrieben und dann wieder korrekt gelesen. Mal schauen, wie ich die Idee weiterentwicklen werde
Grüssli