【问题标题】:export specialized template function from a dll从 dll 导出专门的模板函数
【发布时间】:2011-08-03 07:32:58
【问题描述】:

我有一个模板函数,我在 dll 的头文件中定义。我不需要导出函数,因为所有消费者都会读取头文件并拥有整个函数。但是,我有一个不能在头文件中定义的模板的特化(或者我会得到重新定义链接器错误),所以它必须放在源文件中。

这个函数的正常导出方式是什么?

template <typename T>
bool functionName(/*params*/){
//.....
}

template<> IMPORTEXPORTMACRO
bool functionName(/*params*/);

源文件有

template<>
bool functionName(/*params*/){
//...

IMPORTEXPORTMACRO__declspec(dllimport)dllexport 的宏之一

谢谢

【问题讨论】:

  • 你不能把专门的函数内联吗?从而避免标题错误。
  • 然后我从多次定义的函数中得到错误。
  • 你能简单地展示你的代码吗(你不需要展示整个实现或任何东西)。当我说内联时,您是在指定 inline 对吗?
  • @bdwain :如果您将函数实际标记为 inline,即使用 inline 关键字装饰它,则不会。
  • pastebin.com/fVyJdt33前2个在header里,最后一个在源文件里

标签: c++ templates dll dllimport dllexport


【解决方案1】:

模板的东西确实是占位符。在你使用它之前,编译器不会用真正的(函数/类)东西替换它。你不能把它放在dll中。唯一的方法是在头文件中提供它。如果要隐藏实现,请考虑使用类层次结构(运行时多态性)

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多