避免重复符号并在头文件中保留代码
Avoiding duplicate symbols and retaining code in header files
我有一个全局辅助函数,由头文件中的一堆宏使用。这样做的目的是允许宏通过简单地对单个头文件进行#include
来使用(换句话说,我希望将函数定义保留在头文件中,而避免将其放在单独的编译单元中)。但是,当应用程序#include
在多个编译单元中使用该文件时,就会出现重复符号问题。
helper函数有足够的特征,不应该将其声明为内联。
我发现使用未命名的名称空间解决了重复符号的问题,即:
namespace
{
void foo(...)
{
}
};
#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...
这种方法有什么缺点吗?有没有更好的选择?
你只允许一个函数定义在你的项目,除非它标记为inline
。你可以有任意多的函数声明(又称函数原型)。
将函数定义移动到.cpp文件中,只保留声明在头文件
中void foo(...); // no function body makes this a declaration only
或者你可以标记为inline
:
inline void foo(...) { /* ... */ }
inline
函数通常应该很小,计算速度快。
相关文章:
- 即使使用 FILE_FLAG_DELETE_ON_CLOSE 属性创建文件,文件也会保留在磁盘上
- 如何多次写入.CSV文件并使用C 保留先前的数据
- 如何修复"文件保留原始位置,复制后不复制扩展名"?
- 提升日志 V2 轮换保留一个文件作为"master"
- C++-将stdout/stderr复制到文件,同时保留控制台输出
- 如何在Windows和更高版本上保留内存,并将文件映射到内存中
- 写入文件开头,保留文件内容
- 在哪些情况下,我应该保留多个目标,而不是在生成文件中保留一个目标
- 在新运行的 c++ 程序中重新加载文本文件时保留文本文件的内容
- 在 C++ 中剪切文件中的单词和书写,同时保留行号
- 在将数据传递到字符串中时,如何保留文件的格式?
- 如何在不区分大小写的txt文件中找到字符串,并且仍然保留部分大写?在C++中
- 为什么Cocoapods将保留的文件添加到编译中
- 编辑后保留文件的旧时间戳
- 避免重复符号并在头文件中保留代码
- 读取多个文件,并为每个文件保留一组数据
- 在没有文件支持的情况下保留共享内存(Linux/Windows) (boost::interprocess)
- 在不同的文件上有C++类的任何方法都可以将方法定义保留在类中
- Qt库中的mapreduce是否保留输入文件的顺序?
- c++将矩阵风格的文本文件读入二维数组,只保留数字块