我将我的项目分成动态库和它的客户端代码。如何在C++中实现在客户端的DLL中声明的方法
在库中我有类ObjectModel。
object_model.h:
class ObjectModel {
public:
virtual ~ObjectModel();
static ObjectModel& Get();
/* Some other methods */
protected:
ObjectModel();
ObjectModel(const ObjectModel&);
ObjectModel& operator=(ObjectModel&);
};
我在图书馆,并在客户端代码中使用方法ObjectModel::Get()
。我不在库中实现该方法,因为我需要获取扩展对象并在另一个项目的库中使用它。
在客户端:
#include <object_model.h>
class ExObjectModel : public ObjectModel {
}
ObjectModel& ObjectModel::Get() {
static ExObjectModel m;
return m;
}
int main() {
ObjectModel &m = ObjectModel::Get();
/* ... */
}
它适用于Linux的完美。但是我不能使用MinGW编译DLL,因为错误“未定义引用ObjectModel :: Get()”。是否有可能以这种方式构建DLL?
否。如果您在另一个库中实现了'ObjectModel :: Get()',则需要链接该库。 –
@ n.m。我知道这是脱离主题,但也许你知道另一种获得相同功能的方法。 – flipback
在您的DLL中有一个'init'函数,您明确地传递它需要的所有功能,但无法链接。在你的情况下,它看起来像你需要某种ObjectModel工厂。查看工厂模式。在主程序中创建一个工厂,并根据需要将其传递给模块。 –