Sagen wir, ich habe eine Klasse A umwandeln, die Umwandlungimplizit std :: shared_ptr auf einen Typ
struct A {
int val = 42;
operator int() const {
return val;
}
so kann ich es wie folgt verwenden, um int spezifiziert:
A a;
int a_int = a;
Aber was, wenn ich wollen freigegebenen Zeiger auf die Klasse verwenden:
auto a_ptr = std::shared_ptr<A>(new A);
int a_int = a_ptr; // ???
Genau wie die Variable mit Typ A implizit in int umgewandelt wurde ich das gleiche tun wollen mit einem intelligenten Zeiger. Wie kann ich das erreichen?
UPDATE
Es tut mir Leid vielleicht falsch, fragte ich. Der eigentliche Deal ist ein bisschen komplizierter. Ich benutze QVariant, um std :: shared_ptr zu halten. für jetzt habe ich eine Hilfsfunktion zu tun, dass:
QVariant & operator<< (QVariant& v, const std::shared_ptr<A> & aPtr);
Wenn ich brauche, um meine Zeiger auf QVariant platzieren ich dies:
QVariant variant = QVariant() << a_ptr;
Aber ich möchte es automatisch tun, so etwas wie dieses :
QVariant variant = a_ptr;
Tu das nicht. Schreib einfach '* a_ptr'. –
Die neuen Smart Pointer funktionieren genau wie normale Pointer, die Dinge wie Dereferenzierung enthalten. –
Überlastung der Betreiber in den meisten Fällen ist schlechtes Engineering. Bitte vermeide das. –