我有一个具有模板方法的类:
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>
是进口的。我怎么能说呢?