我正在开发一个项目,其中一个应用程序使用共享库作为插件。 我正在编写这样一个插件,并希望使用一个模板成员的类,该类在主应用程序的代码中定义:
class MyClass
{
public:
template <class T>
T* doSomething();
}
我现在想知道的是:
首先编译主应用程序。这样做时,编译器每次遇到模板成员doSomething()
的新实例时都会扩展类定义。应用程序链接在一起作为包含MyClass
的可执行文件,以及编译器遇到的模板的所有不同实例。
现在编译了共享库(插件)。在这里,我实例化了一个未在主应用程序的代码中实例化的模板版本。
现在,插件和应用程序实际上有MyClass
版本的不同版本,我不知道如何在编译时解决这个问题。
当主应用程序启动并加载共享库(插件)时会发生什么。如果我创建一个库的对象会发生什么?版本MyClass
并将其传递给主应用程序 - 它们无法兼容,对吧?