Se A possiede almeno una funzione virtual è meglio un dynamic_cast.
codice:
class IBase { // interfaccia esposta da C
public:
virtual ~IBase()=0;
virtual void func1()=0;
virtual void outval()=0;
};
IBase::~IBase(){;}
class Legacy { // A
public:
virtual ~Legacy() {;}
void func2() { cout << "Legacy" << endl ; val = 3; }
int val;
void printVal() { cout << val << endl; }
};
class Final : public Legacy, public IBase { // B
public:
~Final(){}
void func1() { func2(); }
void outval() { printVal(); }
};
int main(int argc, char* argv[]) {
Final f;
Legacy* a = &f;
IBase* ib = dynamic_cast<Final*>(a);
if (ib) {
ib->func1();
ib->outval();
}
}