我需要使用一個成員函數指針,它接受在其他代碼中使用的基類參數。那麼,簡單地說,我想要做的[某事]像下面的例子。此代碼工作正常,但我不知道這樣的演員總是安全嗎?我不能在這裏施放dynamic
或static
。鑄造成員函數指針
#include <cstdio>
class C
{
public:
C() : c('c') {}
virtual ~C() {}
const char c;
};
class D : public C
{
public:
D() : d('d') {}
virtual ~D() {}
const char d;
};
class A
{
public:
A() {}
virtual ~A() {}
void f(C& c) { printf("%c\n",c.c); }
void g(D& d) { printf("%c %c\n",d.c,d.d); }
};
int main (int argc, char const* argv[])
{
void (A::*pf)(C& c) = &A::f;
void (A::*pg)(D& d) = reinterpret_cast<void (A::*)(D&)>(&A::f);
A a;
C c;
D d;
(a.*pf)(c);
(a.*pg)(d);
return 0;
}
你說的代碼工作正常,但它甚至不爲我編譯。 – Xeo 2011-05-31 18:48:47
它編譯和(似乎)與'reinterpret_cast'一起工作;我想問題是,這是安全的嗎? – 2011-05-31 18:51:35
感覺f和g實際上是虛擬的嗎?如果是這樣的話,你可以在一些從A派生的類中重寫它們。比鑄造好得多。 – 2011-05-31 19:15:22