テンプレートメソッドを持つクラスがあります:
class DoStuffWithAnything {
public:
template <typename T>
void doStuff(const T&);
};
メソッドは定義されておらず、一般的に定義されることはないことに注意してください。コンパイル ユニットは、これらのメソッドの実装を定義します。
gcc では、シンボルが定義されていない場合は DSO で検索されるため、実際には問題はありません。
msvc で問題が発生しました。MSVC に定義をインポートするように (そして、DSO をコンパイルするときに定義をエクスポートするように) 指示するにはどうすればよいですか?
明確化
XX という名前のライブラリがあるとします。にはlibXX
がありclass XX
ます。また、 はlibXX
を定義します<> doStuff(const XX&)
。
そう、XX.hpp
class XX {
//...
};
そして、XX.cpp
:
#include <XX.hpp>
#include <do_stuff_with_anything.hpp>
//...
template <>
void DoStuffWithAnything::doStuff(const XX&) {
//...
}
したがって、 myapp.exe
は次のようなコードになります。
#include <XX.hpp>
#include <do_stuff_with_anything.hpp>
int main() {
XX a;
DoStuffWithAnything stuffer;
stuffer.doStuff(a);
}
app.exe
doStuff<XX>
インポートされていることを知っておく必要があります。どうすればそれを伝えることができますか?