没关系,
拥有:
class A
{
virtual x() = 0;
virtual y() = 0;
}
class B
{
virtual x() = 0;
virtual z() = 0;
}
class C : A , B
{
x();
y();
z();
}
与两个只知道 A 而另一个只知道 B 的库共享类 C 的实例?
喜欢:
图书馆 1:
#include <a>
A* a = function_in_the_core_that_creates_a_C_and_retrieves_it();
a->x();
a->y();
图书馆 1:
#include <b>
B* b = function_in_the_core_that_creates_a_C_and_retrieves_it();
b->x();
b->z();
我问这个是因为我想知道编译器是否会在解析函数时遇到问题,因为库不完全了解 C 的祖先。
编辑:
function_in_the_core_that_creates_a_C_and_retrieves_it() 应该返回 C* 而不是 C。我认为这很清楚,因为我们正在谈论虚函数。
最佳答案
你真的应该编译代码。 C 私下继承了 A 和 B,所以这个例子不会运行。 class C : public A , public B
是 C
的更正声明。您还缺少函数的返回类型。
要么 function_in_the_core_that_creates_a_C_and_retrieves_it
将返回一个 B*
,然后它将符合 B
的完整祖先并作为 B
用于所有意图和目的 - 否则它将返回 C*
,在这种情况下,您必须提供完整的 C
声明才能进行分配在没有明确类型转换的情况下工作。你不能让 C
just forward declared 来做这件事。
因此,您要么返回一个指向 B
的指针,在这种情况下没有问题 - 或者返回一个指向 C
的指针,您需要在其中提供完整的祖先为了在没有潜在危险的情况下进行分配。
关于c++ - 使用纯虚函数在两个或多个库之间共享一个类的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9464867/