könnte ich Iterator, der auf ein Set-Element zu einem LONG_PTR verweist, umwandeln?Iterator zu LONG_PTR
PS: Ich verstehe nicht vollständig, was ist LONG_PTR?
Hier ist ein Beispiel-Code, der zur Laufzeit eine Fehlermeldung erscheint
#include <windows.h>
#include <set>
#include <string>
using namespace std;
void func(LPARAM lp)
{
set<string>::iterator *it = reinterpret_cast<set<string>::iterator*>(lp);
string s = *(*it); //runtime-error
}
int main()
{
char *arr[] = {"0", "1", "2", "3", "4", "5"};
set<string> s(arr, arr+5);
set<string>::iterator it = s.begin()++;
LONG_PTR lp = reinterpret_cast<LONG_PTR>(&*it);
func(lp);
}
@James: Ich bin neugierig (wie ich noch ziemlich neu in C++ bin), haben Sie eine legitime Verwendung für einen überladenen '&' Operator gefunden? – dreamlax
@dreamlax: Nein; Ich habe keinen legitimen Gebrauch davon gesehen. Ich bin sicher, dass es irgendwo in Boost mit einigen tollen Ergebnissen überlastet ist. Es gab eine interessante Verwendung, die AndreyT vor ein paar Monaten veröffentlicht hat. Im Grunde können Sie das unäre '&' überladen, um die Adresse eines temporären Objekts zu erhalten. Ich denke nicht, dass das legitim ist, aber es ist interessant. –
@ James: Würden Sie mich korrigieren, wenn ich falsch 'LONG_PTR lp = reinterpret_cast (&*it);' es ist Iterator Element zu setzen –
dfx