他のコードで使用される基底クラスの引数を受け取るメンバー関数ポインターを使用する必要があります。ええと、単純に、下の例のような[何か]をしたいのです。このコードは正常に動作しますが、そのようなキャストは常に安全なのだろうか? 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;
}