operator= überladen bei Templates
-
Hi,
ich steh hier grad nen bissel auffem Schlauch und komm nicht weiter...
Hab ne Template-Klasse, die im Grunde so aussieht:template<class T> class CVar { T m_Value; }
Jetzt will ich den operator= überladen, um CVar<T> in T casten zu können (und umgekehrt, aber das geht ja einfach über den c'tor), also z.B.:
CVar<int> a = 5; int b = a;
Ich hab jetzt sowas probiert:
template<class T> T operator=(const CVar &o) { return o.m_Value; }
Das will aber leider nicht... Wahrscheinlich isses einfach zu spät und deshalb seh ich den Fehler nicht... Kann einer helfen?
thx,
fallen
-
probier das:
std::ostream& operator=(std::ostream& os, CVar &o)
-
template<class T> class CVar { typedef CVar<T> This; public: CVar(T val) : m_Value(m_Value) { } template<typename U> This &operator=(U val) { m_Value = val; } operator T&() { return m_Value; } operator const T&() const { return m_Value; } private: T m_Value; };
-
ssm schrieb:
template<class T> class CVar { typedef CVar<T> This; public: CVar(T val) : m_Value(m_Value) //muss heißen: m_Value(val) { } template<typename U> This &operator=(U val) //muss nicht einfach nur T& zurückgegeben werden? { m_Value = val; } operator T&() { return m_Value; } operator const T&() const { return m_Value; } private: T m_Value; };
-
leech schrieb:
//muss heißen: m_Value(val)
ja
leech schrieb:
//muss nicht einfach nur T& zurückgegeben werden?
nein
-
Danke, funktioniert.
-
leech schrieb:
ssm schrieb:
This &operator=(U val) //muss nicht einfach nur T& zurückgegeben werden?
Wie schon gesagt, nein. Der Umweg über This mit
typedef CVar<T> This;
ist allerdings redundant, da 'CVar' innerhalb der Klassendefinition implizit immer 'CVar<T>' ist. Ein simples
template<typename U> CVar& operator=(U val)
reicht auch, wobei ich dann doch eher
template<typename U> CVar& operator =(const U& val)
schreiben würde.
edit:
Hoffe jetzt siehts besser aus.
-
geiler bug im forum
-
groovemaster schrieb:
Hoffe jetzt siehts besser aus.
es kann noch besser mit boost::call_traits aussehen :p