Zeiger zu long umwandeln!
-
Wie kann ich den Zeiger eines Objekts zu einer long Variable umwandeln?
So was:class A { public: A() { long p = this; // ??????? Wie? } };
-
Im obigen Fall brauchst du in A einen operator long(.....) der den Typ A in long umwandelt und dann:
long temp = dynamic_cast<long>(*this);
-
tuts nicht auch nen reinterpret_cast<long>(this)?
-
thordk schrieb:
tuts nicht auch nen reinterpret_cast<long>(this)?
Yuppie! Das funzt!
Jetzt will ich wissen wie ich aus long, den Zeiger kriege!
-
genauso.
struct A { long ptr() { return reinterpret_cast<long>(this); } }; int main() { A a; long l = a.ptr(); A *b; b = reinterpret_cast<A*>(l); }aber bevor du das so verwendest, soll jemand mit mehr reinterpret_cast ahnung als ich sein OK geben ^^
-
Als Typ würde ich eher ptrdiff_t oder size_t empfehlen. Auf Systemen mit zB LLP64 Datenmodell (Win64) hast du mit long ein Problem.
-
Aber wofür willst du einen Zeiger in einer long-Variable speichern? Abgesehen davon, dass glaubich gar nicht gesichtert ist, dass der Zeiger auch reinpasst.
-
Badestrand schrieb:
Aber wofür willst du einen Zeiger in einer long-Variable speichern?
ZB um mehr Freiheit bei der Adressmodifizierung zu haben.
-
groovemaster schrieb:
Badestrand schrieb:
Aber wofür willst du einen Zeiger in einer long-Variable speichern?
ZB um mehr Freiheit bei der Adressmodifizierung zu haben.
Äh?
So etwas macht man nicht!
-
Ich benutze gerade Win32 API. Dort kann man beim Erstellen eines Windows zusätzlich Speicherplatz reservieren. Ich habe 8 Bytes festgelegt. Darin kann man beliebige Daten speichern. Leider sind die get/set Funktionen mit long versehen. D.h., wenn ich einen Zeiger speichern/lesen will, muss ich immer diese hässliche Konvertierung machen!

-
rüdiger schrieb:
Äh?
So etwas macht man nicht!
Doch, macht man schon, sofern man es braucht. Einfach mal ein bisschen über simple Zeigerarithmetik hinaus denken.

-
Zdravko schrieb:
Ich benutze gerade Win32 API. Dort kann man beim Erstellen eines Windows zusätzlich Speicherplatz reservieren. Ich habe 8 Bytes festgelegt. Darin kann man beliebige Daten speichern. Leider sind die get/set Funktionen mit long versehen. D.h., wenn ich einen Zeiger speichern/lesen will, muss ich immer diese hässliche Konvertierung machen!

also wieder einer der grauenvollen designfehler von win32
warum nicht einfach eine lib benutzen die das ganze weniger hirnverbrannt macht
(winapi nutzen macht imho nur sinn, wen __explizit__ verlangt
-
Wo genau ist da ein Design Fehler?
Edit:
es handelt sich übrigens nicht um den C++ Datentyp long sondern um das typedef LONG_PTR dass garantiert die größe hat um einen Zeiger aufnehmen zu können