为专门的模板方法设置DSO接口

时间:2013-02-21 13:36:28

标签: c++ visual-c++ shared-libraries

我有一个具有模板方法的类:

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>已导入。我该怎么说呢?

0 个答案:

没有答案