加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux C:如何在多个文件中正确使用模板特化?

发布时间:2020-12-13 19:04:23 所属栏目:Linux 来源:网络整理
导读:我有一个奇怪的问题.在Windows上,使用Visual Studio 2010以及英特尔编译器,所有内容都按预期链接.但是当我尝试在Linux上使用CLang 3.0编译我的代码时,它确实编译(如果我只使用单个CPP文件,它也会链接和运行)但是没有链接. 消息是有多个符号定义,指的是模板实

我有一个奇怪的问题.在Windows上,使用Visual Studio 2010以及英特尔编译器,所有内容都按预期链接.但是当我尝试在Linux上使用CLang 3.0编译我的代码时,它确实编译(如果我只使用单个CPP文件,它也会链接和运行)但是没有链接.

消息是有多个符号定义,指的是模板实例化.例如,在多个编译单元共享的头文件中考虑以下两行:

 template

现在从Linux链接器我会得到以下内容:

“file xyz”: Multiple definition of “myFunc(int in)”,first defined in “some file”.

但是我该怎么做呢?既然它适用于Windows,我认为它应该在某种程度上适用于Linux?

对于静态模板数据成员也是如此,这些成员与您声明变量而不是函数或多或少相同.我更喜欢它是否适用于静态模板数据成员.

如果其他一切都失败了,我想我仍然可以创建一个“MakeAll.cpp”文件,其中包含所有CPP,但这对我来说听起来不是一个理想的解决方案……

谢谢你的帮助!

最佳答案
根据我的理解,您实际上是多次定义模板特化,这也应该为Windows编译器带来错误.

在头文件中,您通过提供正文来定义函数:

template<> void myFunc

该定义将存在于多个编译单元中,并且链接器应该抱怨.

同样的规则适用于您的模板专业化,与普通的非模板函数相同:使用内联或使用单独的声明和定义,通过放置

template<> void myFunc

在标题和

template<> void myFunc

在.cpp文件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读