我有一个全局帮助函数,由头文件中的一堆宏使用.其意图是允许宏是通过简单地使用#include"荷兰国际集团的单头(换句话说,我想保持头中的函数定义并避免把它在一个单独的编译单元).但是,当应用程序#include将此文件存在于多个编译单元中时,这会导致问题,因为出现重复符号问题.
辅助函数具有足够的特性,不应在其中声明内联.
我搞乱了,发现使用未命名的命名空间解决了重复符号的问题,即:
namespace
{
void foo(...)
{
}
};
#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...
Run Code Online (Sandbox Code Playgroud)
这种方法有什么缺点吗?还有更好的选择吗?
项目中只允许有一个函数定义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作为一般规则,函数应该小且计算速度快。
| 归档时间: |
|
| 查看次数: |
1985 次 |
| 最近记录: |