[Operatorüberladung]: diesmal * und ->
-
Damit ich in nem smart_ptr nicht immer ne Methode aufrufen muss um an den Pointer dranzukommen(führt zu hässlichem Code) möcht ich die Operatoren * und -> überladen, wei jemand wie das geht?
thx
Glamdring
-
Class* operator->() { return ptr; } Class& operator*() { return *ptr; }
-
ok, danke
-
Daa ist meine smart-ptr Klasse:
namespace main { template<class T> class smart_ptr { private: T* ptr; public: smart_ptr(); smart_ptr(T* nptr); ~smart_ptr(); smart_ptr* operator->(); smart_ptr& operator*(); }; } main::smart_ptr<class T>::smart_ptr() { throw; } main::smart_ptr<class T>::smart_ptr(T* nptr) { ptr = nptr; } main::smart_ptr<class T>::~smart_ptr() { delete ptr; } main::smart_ptr& main::smart_ptr<class T>::operator*() { return *ptr; } main::smart_ptr* main::smart_ptr<class T>::operator->() { return ptr; }
Ich find keinen Fehler, der Compiler findet viele, die ich leider nicht kopieren kann, tippen würd ca. 30 min. dauern.
Was ist falsch? wie kann ichs verbessern?
thx
Glamdring
-
Nur ein Beispiel:
template<class T> main::smart_ptr<T>& main::smart_ptr<T>::operator*() { return *ptr; }
Außerdem könnte es problematisch sein, einen Namespace namens main anzulegen.
-
Glamdrink schrieb:
main::smart_ptr<class T>::smart_ptr() { throw; }
Lass doch einfach den Standard-Konstruktor weg, wenn du nicht willst das er aufgerufen wird.
Ich find keinen Fehler, der Compiler findet viele, die ich leider nicht kopieren kann, tippen würd ca. 30 min. dauern.
Copy & Paste? Ausserdem ist meist eh nur die erste Fehlermeldung entscheident.
So sieht eine Klassenmethode ausserhalb der Klasse in einem Namespace aus:
namespace Blub { template<class T> void Klasse<T>::func() { } }
Und ich glaube 'main' als Bezeichner fuer irgendwas ist verboten.
-
Dazu gibts eins zu sagen: Aua!
mfg
Glamdring