关于C#:模板分布在多个文件中

Templates spread across multiple files

当在多个文件中声明模板时,

C似乎很讨厌。更具体地说,当使用模板化类时,链接器应在单个编译器目标文件中期望该类的所有方法定义。当您考虑标头,其他声明,继承等时,情况就会变得非常混乱。

对于在多个文件中组织或重新分配模板化的成员定义,是否有任何一般性建议或变通办法?


Are there any general advice or workarounds for organizing or redistributing templated member definitions across multiple files?

是的;不要。

C规范允许编译器在实例化点"看到"整个模板(声明和定义),并且(由于任何实现的复杂性)大多数编译器都保留了此要求。结果是#inclusion任何模板头还必须#include实例化模板所需的任何和所有源。

处理此问题的最简单方法是将所有内容转储到标头中,在可能的地方内联,在必要时外出。

如果您真的认为这是不可接受的侮辱,一个常见的选择是将模板拆分为通常的标头/实现对,然后在标头的末尾#include实现文件。

C的"导出"功能可能会或可能不会提供其他解决方法。该功能支持不佳且定义不清;尽管从原则上讲它应该允许模板的某种单独的编译,但是并不一定消除了编译器能够看到整个模板主体的要求。


跨多少个文件?如果您只想将类定义与实现分开,请在C常见问题解答中尝试本文。这是目前我知道的唯一方法,但是某些IDE(例如Eclipse CDT)无法正确链接此方法,您可能会遇到很多错误。但是,编写自己的makefile或使用Visual C始终对我有用:-)


当/如果您的编译器支持C 0x,则可以使用extern关键字将模板声明与定义分开。

请参阅此处以进行简要说明。

此外,David Vandevoorde和Nicolai M. Josuttis撰写的C模板:6.3部分,"分离模型",完整指南介绍了其他选项。

alt

推荐阅读

    linux分隔文件命令?

    linux分隔文件命令?,系统,信息,文件,命令,位置,指令,文件夹,目录,前缀,方法,l

    linux改文件权限命令?

    linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

    linux命令交换文件名?

    linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,

    linux文件夹转移命令?

    linux文件夹转移命令?,系统,文件,命令,位置,材料,信息,工具,电脑,目录,源文

    linux转移文件命令?

    linux转移文件命令?,文件,命令,密码,电脑,位置,名称,信息,系统,目录,目标,lin

    linux下替换文件命令?

    linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内

    linux文件nl命令?

    linux文件nl命令?,地址,工作,信息,系统,情况,标准,实时,对比,百度,命令,linux

    linux寻找文件夹命令?

    linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,

    linux跳到文件尾命令?

    linux跳到文件尾命令?,系统,文件,命令,管理,状态,实时,末尾,光标,内容,编辑,l

    linux把文件复制命令?

    linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文

    linux文件夹合并命令?

    linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

    linux下文件创建命令?

    linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

    linux命令行安装文件?

    linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,L

    linux文件解包命令?

    linux文件解包命令?,系统,地址,命令,文件,管理,手机,数据,工具,标准,单位,lin

    linux重启文件命令?

    linux重启文件命令?,系统,工作,标准,设备,命令,灵活,用户,电源,方式,级别,lin

    linux解压文件命令行?

    linux解压文件命令行?,系统,电脑,命令,文件,平台,名称,软件,管理,标准,目录,

    linux文件发送到命令?

    linux文件发送到命令?,服务,软件,系统,数据,文件,命令,工作,第一,工具,服务

    linux命令编辑文件?

    linux命令编辑文件?,系统,状态,电脑,命令,数据,标准,不了,名称,发行,网络,Lin

    linux文件乱码命令?

    linux文件乱码命令?,系统,环境,乱码,信息,状态,盘中,文件,字符集,中文,文件