N
Jakob Hoffmann schrieb:
Was versteht man denn allgemein unter einer Factory-Funktion?
Eine externe Funktion (nicht Konstruktor), die für die Erzeugung eines Objekts sorgt.
Jakob Hoffmann schrieb:
Jetzt versteh ich bloß noch nicht wie ich die Werte ändern kann, ohne direkt auf die Klasse Display zugreifen zu müssen?
Ich dachte, die Änderungen geschähen primär bei der Initialisierung. Sonst hast du Recht, dann würde sich der Ansatz nicht bewähren.
Hm... Naja, dann nimmst du vielleicht doch eine zentrale Datensammlung in Property . Vielleicht sowas, wobei du enum s zur Fallunterscheidung je nach Aufgabenbereich benutzen kannst.
class Property
{
public:
SetUint(int id, UINT value);
UINT GetUint(int id) const;
SetBool(int id, bool value);
bool GetBool(int id) const;
private:
std::map<int, UINT> myUintMap;
std::map<int, bool> myBoolMap;
};
// Anwendung:
namespace DialogAttribute
{
enum Type
{
Contrast,
Brightness,
State,
};
}
int main()
{
Property p;
p.SetUint(DialogAttribute::Contrast, 45);
p.SetUint(DialogAttribute::Brightness, 80);
p.SetBool(DialogAttribute::State, true);
}
Obwohl das nicht wahnsinnig sauber ist. Du musst vor allem schauen, dass die IDs nie kollidieren. Aber z.B. OpenGL macht das auch so, obwohl es natürlich C ist... Ich habe dennoch das Gefühl, einzelne Wrapperklassen wären einfacher. Nicht immer musst du den abstrakten Weg wählen.