当编写头文件库(例如Boost)时,是否可以定义非方法的自由浮动函数,而不会(1)使生成的二进制文件膨胀和(2)遭受“未使用”警告?
当我在一个头文件中定义一个函数,该头文件被多个源文件包含,这些源文件链接到同一个二进制文件时,链接器会抱怨重定义。解决此问题的一种方法是使函数静态化,但这会在每个翻译单元中复制代码(顺便问一下,链接器能够安全地去重吗?)。此外,这会触发编译器对函数未使用的警告。
我试图寻找Boost中自由浮动函数的示例,但我找不到。技巧是将所有内容都包含在类(或模板)中吗?
当我在一个头文件中定义一个函数,该头文件被多个源文件包含,这些源文件链接到同一个二进制文件时,链接器会抱怨重定义。解决此问题的一种方法是使函数静态化,但这会在每个翻译单元中复制代码(顺便问一下,链接器能够安全地去重吗?)。此外,这会触发编译器对函数未使用的警告。
我试图寻找Boost中自由浮动函数的示例,但我找不到。技巧是将所有内容都包含在类(或模板)中吗?
__declspec(selectany)
以及GCC中的__attribute__((weak))
。 - AnT stands with Russia