在C ++项目中管理自由函数有哪些好的做法?

时间:2017-08-14 17:55:24

标签: c++

我正在编写一些代码来实现SIFT特征检测器,并且在整个项目中使用了一些免费函数,例如

int iAlignUp( int a, int b ){return (a%b != 0) ? (a + b - a%b) : (a);}
int iDivUp( int a, int b ){return (a%b != 0) ? (a/b + 1) : (a/b);}

我应该将这些函数封装在一个未命名的命名空间中吗?我希望管理我的代码,以便稍后可以毫无问题地进行扩展。

1 个答案:

答案 0 :(得分:3)

您有两种选择,具体取决于它们是在单个文件中还是在多个文件中使用。

将它们放入未命名的命名空间。

如果函数仅在单个源代码文件中使用,则可以将它们放在该文件中的未命名命名空间中。

namespace
{
    int iAlignUp( int a, int b ){return (a%b != 0) ? (a + b - a%b) : a;}
    int iDivUp( int a, int b ){return (a%b != 0) ? (a/b + 1) : (a/b);}
}

将它们放在头文件和内部命名空间中。

如果函数用于多个源代码文件,但不在项目之外,则可以将它们放在仅包含在项目中的头文件中,并将它们放在内部命名空间中。

namespace project
{
namespace impl
{
    inline int iAlignUp( int a, int b ){return (a%b != 0) ? (a + b - a%b) : a;}
    inline int iDivUp( int a, int b ){return (a%b != 0) ? (a/b + 1) : (a/b);}
}
}

在此示例中,project::impl命名空间在项目外部不可见。在任何外部可访问的头文件中都没有提到它。