我正在编写一些代码来实现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);}
我应该将这些函数封装在一个未命名的命名空间中吗?我希望管理我的代码,以便稍后可以毫无问题地进行扩展。
答案 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
命名空间在项目外部不可见。在任何外部可访问的头文件中都没有提到它。