具有模板基类和模板参数的导出派生类本身是派生的

Rol*_*and 7 c++ templates dynamic-linking dllexport

我有一个简短的问题,希望有人知道我正在尝试的是否可行.

假设我有一个像这样的模板基类

template <class T> 
CBase
{
    public: 
        CBase() {}
        void print() { std::cout << n std::endl; }
    private:
    T m_var;
};
Run Code Online (Sandbox Code Playgroud)

并且想要一个派生类,它使用自身作为模板参数从CBase派生:

class CDerived : public CBase<CDerived>
{
    public: 
        CDerived () {}
};
Run Code Online (Sandbox Code Playgroud)

我有一个以这种方式构建的库,到目前为止,这个库是静态构建的,一切都很好.但现在我想将其更改为动态库,因此我为派生类添加了export/import关键字:

#if defined(BUILD_LIBRARY)
#  define EXPORT __declspec(dllexport)
#else
#  define EXPORT __declspec(dllimport)
#endif

class EXPORT CDerived : public CBase<CDerived>
{
    public: 
        CDerived () {}
};
Run Code Online (Sandbox Code Playgroud)

这构建和链接很好,但只要我在可执行文件中使用CDerived,我就会收到有关CBase的链接器错误.未找到任何CBase方法或构造函数的参考.

我已经阅读了很多关于导出模板专业化的内容,但是这并没有帮助.似乎这种情况通常是可解决的,但由于我的派生类也是模板参数,因此可能存在问题.

有人可以告诉我这个特殊情况是否可以导出或根本不可能?