我有一个具有模板方法的类:
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&) {
//...
}
所以,我的app.exe
会有类似的代码:
#include <XX.hpp>
#include <do_stuff_with_anything.hpp>
int main() {
XX a;
DoStuffWithAnything stuffer;
stuffer.doStuff(a);
}
app.exe
必须知道doStuff<XX>
已导入。我该怎么说呢?