让我为这个长期问题道歉.它尽可能短,但不幸的是,它不是很短.
我定义了两个接口,A和B:
class A // An interface
{
public:
virtual ~A() {}
virtual void whatever_A()=0;
};
class B // Another interface
{
public:
virtual ~B() {}
virtual void whatever_B()=0;
};
Run Code Online (Sandbox Code Playgroud)
然后,我有一个共享库"testc"构建类C的对象,同时实现A和B,然后传递指向它们的A接口的指针:
class C: public A, public B
{
public:
C();
~C();
virtual void whatever_A();
virtual void whatever_B();
};
A* create()
{
return new C();
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一个第二个共享库"testd",它接受一个A*输入,并尝试将其转换为a B*,使用dynamic_cast
void process(A* a)
{
B* b = dynamic_cast<B*>(a);
if(b)
b->whatever_B();
else
printf("Failed!\n");
}
Run Code Online (Sandbox Code Playgroud)
最后,我有主要的应用程序,A*在库之间传递:
A* …Run Code Online (Sandbox Code Playgroud)