ハッシングの一環として、関数ポインタを文字列表現に変換する必要があります。グローバル/静的関数で、それは些細です:メンバ関数の文字列表現を取得する方法は?
string s1{ to_string(reinterpret_cast<uintptr_t>(&global)) };
そしてhereから:
2)任意のポインタが に十分な大きさの任意の整数型に変換することができますが
std::uintptr_t
(例えばポインタの値を保持します)
しかし、私はメンバ関数に問題があります。
cout << &MyStruct::member;
を
出力は1
ですが、デバッガではそのアドレスを見ることができます。
string s{ to_string(reinterpret_cast<uintptr_t>(&MyStruct::member)) };
コンパイル時にエラーcannot convert
が返されます。だから、どのポインタも変換できないようです。
文字列表現を得るために他に何ができますか?
「1」は正しい値かもしれません。結局、メンバ関数ポインタは相対的なものです。これはまた、型自体のtypeidのハッシュのような追加情報を追加しないと、多くの衝突に遭遇する可能性があることを意味します。そして、あなたが*どのポインタも変換できない*と言うとき、メンバ関数ポインタ*はポインタではないことを覚えておいてください。それらは正確に*メンバー関数ポインタ*です。 –
"ポインタは変換できないようです... ..."ポインタはメンバへのポインタと同じではなく、ポインタは整数型に変換でき、メンバへのポインタは変換できません。 – user657267
メンバーへのポインタのための 'operator <<'はありません。 '&MyStruct :: member'はnullでないメンバへのポインタです。どのポインタも 'bool'に暗黙的に変換できます。 NULLでないポインタは 'true'に変換され、デフォルトで' 1'として出力されます。 – molbdnilo