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方法或构造函数的参考.
我已经阅读了很多关于导出模板专业化的内容,但是这并没有帮助.似乎这种情况通常是可解决的,但由于我的派生类也是模板参数,因此可能存在问题.
有人可以告诉我这个特殊情况是否可以导出或根本不可能?
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |