005
31.08.2006, 11:39 Uhr
Th
|
@stephanw: deine Klasse macht als Wrapper schon Sinn, nämlich wenn man den Konstruktor noch mit 'explicit' deklariert:
C++: |
class Integer { public: explicit Integer( int i ); operator int() const; private: int i; };
|
Nun verhält sich diese Klasse wie ein int (durch den cast-operator), aber das Erzeugen eines Integers muß explizit erfolgen, d.h. wenn eine Funktion einen Integer verlangt, dann muß man auch Integer(0) schreiben und nicht nur 0.
Allgemeiner kann man diese Klasse natürlich auch in ein template packen:
C++: |
template<typename T> class Wrapper { public: explicit Wrapper( T t ) : m_t(t) {}
operator T() const { return m_t };
private: T m_t; };
|
Nun kann man z.B. typedef Wrapper<int> Jahr schreiben. Dies ist besser als "typedef int Jahr", denn dann kann man nicht einfach eine andere beliebige Variable z.B. ein Tag oder Monatswert als Jahr übergeben, z.B. bei einer Funktion wie SetDate(int, int, int) weiß man nicht, welches nun Tag, Monat oder Jahr ist, aber bei SetDate(Jahr, Monat, Tag) ist dies dann eindeutig. |