set要素を指すイテレータをLONG_PTRにキャストできますか?Iterator to LONG_PTR
PS:LONG_PTRは何かを完全に理解していませんか?ここ
ランタイム
#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:私はまだ興味があります(私はまだC++の新機能として)、オーバーロードされた '&'演算子の正当な使用に遭遇しましたか? – dreamlax
@dreamlax:いいえ。私はそれを正当に使用していません。私はBoostのどこかで過負荷になっていると確信しています。 AndreyTが数ヶ月前に投稿した興味深い用途が1つありました。基本的には、一時オブジェクトのアドレスを取得できるように単項 '&'をオーバーロードすることができます。私はそれが合法だとは思わないが、それは面白い。 –
@ James:私が間違っていると私を修正しますか?LONG_PTR lp = reinterpret_cast(&*it); 'エレメントを設定するイテレータです。 –
dfx