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