他のC++プロジェクトで一般的に使用されているC++クラスライブラリプロジェクトがあります。クラスライブラリプロジェクト内でクラスを使用できるようにするために、以下の例のようなヘッダーファイルを作成しました。
#pragma once
#ifdef MYLIB
# define MYLIB_EXPORT __declspec(dllexport)
#else
# define MYLIB_EXPORT __declspec(dllimport)
#endif
クラスライブラリプロジェクト内にテンプレートクラスを作成するまでは問題ありません。問題は、テンプレートクラスをエクスポートできないことです。
MyClass.h
template<class T>
class MYLIB_EXPORT MyClass
{
void myMethod();
// ...
}
template<class T>
void MyClass::myMethod()
{
// ...
}
この場合、「dllimport関数の定義は許可されていません」というコンパイルエラーが発生します。私は何が問題を引き起こしているのかを知っており、それを理解しています。クラスライブラリプロジェクトを使用する他のプロジェクトは、MYLIB_EXPORTキーワードを__declspec(dllimport)に変換します。したがって、彼らはMyClassのメソッドがDLLで定義されることを期待しています。ただし、コンパイラはヘッダー内の定義を確認します。
この状況を克服し、クラスライブラリプロジェクト内で定義されているテンプレートクラスをエクスポートするにはどうすればよいですか?