插件的C ++多态基类层次结构设计

时间:2013-12-23 09:31:03

标签: c++ plugins dll linker polymorphism

我想在我的项目中有一个基于DLL的插件系统。每个插件都应该实现我的应用程序提供的抽象接口。在我的应用程序中,我处理所有类层次结构实例,通过基本多态类智能指针(这是一个实际提供接口的类)在不同的插件中生成。

这是我的多态基类定义,又名抽象接口,它放在头文件中,我只想为插件开发人员提供。

class ISomeInterface{
    public:
        virtual ~ISomeInterface(); // need for base polymorphic class
            ...                  // other methods, including pure virtual
    private:
            ...

    };

所以我需要至少为析构函数添加一个实现。如果我将它放在相应的源文件中 - 它会导致我另外向插件开发人员提供此文件或编译库。

从另一方面 - 我可以将析构函数实现放在头文件中,但是还有另一个问题。我使用此标头在我的应用程序插件中嵌入了几个不同的源文件。当我尝试编译它时,由于我的应用程序目标文件中存在名称冲突,我将收到链接器错误。

有什么好的做法吗?

1 个答案:

答案 0 :(得分:1)

将成员函数的定义放在类声明中,可以将头文件包含在不同文件中,而不会出现符号重定义问题。

class ISomeInterface{
    public:
        virtual ~ISomeInterface()
        {
            ...
        }

    private:
            ...

    };