避免重复符号并保留头文件中的代码

jwa*_*alk 5 c++

我有一个全局帮助函数,由头文件中的一堆宏使用.其意图是允许宏是通过简单地使用#include"荷兰国际集团的单头(换句话说,我想保持头中的函数定义并避免把它在一个单独的编译单元).但是,当应用程序#include将此文件存在于多个编译单元中时,这会导致问题,因为出现重复符号问题.

辅助函数具有足够的特性,不应在其中声明内联.

我搞乱了,发现使用未命名的命名空间解决了重复符号的问题,即:

namespace
{
    void foo(...)
    {
    }
};

#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...
Run Code Online (Sandbox Code Playgroud)

这种方法有什么缺点吗?还有更好的选择吗?

Rob*_*ieE 3

项目中只允许有一个函数定义inline,除非其标记为. 您可以拥有任意数量的函数声明(也称为函数原型)。

将函数定义移至 .cpp 文件,并将声明保留在头文件中

void foo(...); // no function body makes this a declaration only
Run Code Online (Sandbox Code Playgroud)

或者你可以标记它inline

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

inline作为一般规则,函数应该小且计算速度快。

  • 虽然您的答案实际上是准确的,但OP已经提到了这两种方法,并且您未能解决OP现在选择不考虑它们的原因。 (5认同)