0

テンプレートメソッドを持つクラスがあります:

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.exedoStuff<XX>インポートされていることを知っておく必要があります。どうすればそれを伝えることができますか?

4

0 に答える 0