我想知道这是否可能。同样,问题是:
How can I extend from a libraries class, then have the library call a function inside the derived class?
显然,在编写使用继承的代码(如下所示为 DerivedClass)之前,已经构建/编译了该库。我想尽可能地从用户那里抽象出来。为此,我进行了以下设置(包括为简单起见而省略):
LibraryClass 是我创建的 .lib 中的一个类。
LibraryClass.h
class LibraryClass{
public:
virtual void MyMethod() { }
};
DerivedClass 继承自这个库:
DerivedClass.h
Class DerivedClass: public LibraryClass {
public:
virtual void MyMethod();
};
如果我在 DerivedClass 源文件中定义 MyMethod 如下:
DerivedClass.cpp
void DerivedClass::MyMethod() {
cout << "it works!" << endl;
}
库有没有办法调用派生类的方法?我想将 DerivedClass 对象作为指针传递给库,但库无法访问 header 以包含它,因为它已经编译到 .lib 中。
我以前看过这个(Urho3D),他们使用黑魔法还是我遗漏了一些简单的东西?
最佳答案
这正是动态分配(在 C++ 中称为 virtual
)所做的:给定一个 Base*
(或 Base&
) 引用派生类型的对象,即使没有任何 Derived
声明,对虚函数的调用也会找到覆盖(因此即使调用是“首先编译的”) .
至于你的“图书馆提供的main
”的想法,这要困难得多:一般来说,图书馆如何知道如何构造你的对象,以及什么会如果你链接到 two “extending classes” 就会这样做?
但这是可能的,如果库为它设计:让库提供一个全局指针变量(如果你想有一个默认值,它在 main
中分配),并让扩展类的构造函数将 this
分配给它。然后只需定义该类类型的全局对象即可。如果不需要默认行为,也可以只在库中声明和调用,而不是定义初始化函数,交给扩展来定义。
关于c++ - 从库类扩展,然后如何让库调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597315/