如何在头库中定义(非方法)函数

Yan*_*ang 4 c++ static boost warnings header

在编写头库(如Boost)时,可以定义自由浮动(非方法)函数,而不会(1)膨胀生成的二进制文件和(2)产生"未使用"的警告吗?

当我在多个源文件中包含的头文件中定义一个函数时,该头文件又被链接到同一个二进制文件中,链接器会抱怨重新定义.解决这个问题的一种方法是使函数保持静态,但这会在每个翻译单元中重现代码(顺便说一句,链接器可以安全地重复这些吗?).此外,这会触发有关未使用函数的编译器警告.

我试图在Boost中寻找一个自由浮动函数的例子,但我找不到一个.是否包含类(或模板)中的所有内容?

Dav*_*ner 12

如果您确实想要定义函数(而不是声明它),则需要使用它inline来防止链接器错误.

否则,您可以在头文件中声明该函数,并在源文件中单独提供其实现.


GMa*_*ckG 8

您可以使用inline关键字:

inline void wont_give_linker_errors(void)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)