我想知道这是否可能。同样,问题是:
如何从库类扩展,然后让库在派生类中调用函数?
显然,在编写使用继承的代码之前,该库已经构建/编译(如下所示,显示为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对象作为指针传递给库,但是该库无权访问包含它的标头,因为它已被编译到.lib中。
我以前曾经看过(Urho3D),他们使用黑魔法还是想念一些简单的东西?
这正是动态调度(在C ++中称为virtual
)所做的事情:给定Base*
(或Base&
)引用派生类型的对象,即使没有任何声明,对虚拟函数的调用也会找到重写Derived
(因此,即使调用是“先编译”)。
关于您的“库提供的main
”想法,要难得多:总的来说,他的库将如何知道如何构造您的对象,如果您链接两个“扩展类”,它将做什么?
但是可能的是,如果库为它设计:让该库提供一个全局指针变量(main
如果您要使用默认值,this
则将其分配给它),并让扩展类的构造函数分配给它。然后,只需定义该类类型的全局对象即可。如果不需要默认行为,也可以在库中声明并调用而不是定义初始化函数,然后将其留给扩展名来定义它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句