作爲哈希的一部分,我需要將函數指針轉換爲字符串表示形式。隨着全球/靜態函數是微不足道:如何獲取成員函數的字符串表示形式?
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'是一個非空的指向成員的指針。任何指針都可以隱式轉換爲「bool」。非空指針轉換爲'true',默認打印爲'1'。 – molbdnilo