struct A { void m() { } };
void stream_print() {
void(A::*p)(void) = &A::m;
std::cerr << p << std::endl;
}
void printf_print() {
void(A::*p)(void) = &A::m;
fprintf(stderr, "%p", p);
}
的stream_print()函數始終打印 「1」,這顯然不是我想要的。 printf_print不會編譯,因爲p不能被轉換爲void *。
我需要的是我可以在一個容器中存儲的方法指針的唯一標識符。我知道這聽起來不是個好主意,但我正在開發一款可以從中受益的單元測試小玩具。我不擔心該方法的重載,我知道如何獲得指向特定超載的指針。
我使用G ++ 4.4.3用的C++ 0x啓用。
讓我知道如果您有任何疑問。
+1除非有人指出瑕疵...... – 2011-03-20 08:04:06
@Matthieu M .:首先,這顯然不正確。 C沒有定義函數指針到'void *'的轉換,當然,不能保證它。 C沒有定義數據指針和函數指針之間的「混合」轉換。你可以使用'void(*)(void)'作爲通用函數指針,但不能使用'void *'。 – AnT 2011-03-20 15:34:49
@Matthieu M .:其次,問題是關於成員函數指針,而不是指向獨立函數的指針,這完全是另一回事。 – AnT 2011-03-20 15:35:33