我有一个其他 C++ 项目常用的 C++ 类库项目。为了能够在我的类库项目中使用类,我编写了一个头文件,如下例所示
#pragma once
#ifdef MYLIB
# define MYLIB_EXPORT __declspec(dllexport)
#else
# define MYLIB_EXPORT __declspec(dllimport)
#endif
在我想在我的类库项目中创建一个模板类之前没问题。问题是我无法导出我的模板类。
我的类.h
template<class T>
class MYLIB_EXPORT MyClass
{
void myMethod();
// ...
}
template<class T>
void MyClass::myMethod()
{
// ...
}
在这种情况下,我收到编译错误,提示“不允许定义 dllimport 函数”。我知道导致问题的原因并且我理解它。使用我的类库项目的其他项目将 MYLIB_EXPORT 关键字转换为 __declspec(dllimport)。因此,他们期望 MyClass 的方法在 DLL 中定义。但是,编译器会在头文件中看到定义。
如何克服这种情况并能够导出在我的类库项目中定义的模板类?