我想知道这是否可能。同样,问题是:
如何从库类扩展,然后让库调用派生类中的函数?
显然,在编写使用继承的代码(如下所示为DerivedClass)之前,库已经构建/编译过了。我想尽可能地从用户那里抽象化。为了做到这一点,我做了以下设置(包括为了简单起见而忽略的):
LibraryClass是我创建的.lib中的一个类。
LibraryClass.h
class LibraryClass{
public:
virtual void MyMethod() { }
};DerivedClass继承自此库:
DerivedClass.h
Class DerivedClass: public LibraryClass {
public:
virtual void MyMethod();
};如果我按照以下方式在MyMethod源文件中定义DerivedClass:
DerivedClass.cpp
void DerivedClass::MyMethod() {
cout << "it works!" << endl;
}库有任何方法调用派生类的方法吗?我想把一个DerivedClass对象作为指针传递到库中,但是库没有访问标头来包含它的权限,因为它已经编译到.lib了。
我以前见过这样的做法(Urho3D),他们是使用黑魔法还是我遗漏了一些简单的东西?
发布于 2018-04-01 13:33:55
这正是动态分派(在C++中称为virtual)所做的事情:给定引用派生类型对象的Base* (或Base&),即使没有任何Derived声明,对虚拟函数的调用也会找到覆盖(因此,即使调用是“先编译的”)。
至于你的“库提供的main”的想法,这要难得多:一般来说,他的图书馆怎么知道如何构造你的对象,如果你用 “extending classes”链接它,它会做什么?
但是,如果库为它设计:让库提供一个全局指针变量(如果您想要默认的话,它在main中分配这个变量),并让扩展类的构造函数将this分配给它,这是可能的。然后,只需定义该类类型的全局对象。如果不需要默认行为,也可以声明和调用库中的初始化函数,但不需要定义函数,并将其留给扩展来定义。
https://stackoverflow.com/questions/49597315
复制相似问题