我想知道我是否可以在头文件中定义一些函数,然后在同一个头文件中使用它们,同时将它们隐藏在其他任何文件中?
例如,我可以先定义一些通用的辅助函数(特定于数据结构),然后在使用这些函数的同一个头文件中定义一些数据结构吗?
例如:
template<class T>
void Swap(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
但我不希望Swap()
干扰其他具有相同名称的功能。
我可以把它变成一个私有方法,但是我必须为每个使用它的类提供相同的实现,或者让它们成为朋友类......
答案 0 :(得分:6)
传统上,名称空间details
用于必须包含在标题中的实现保留内容。
此外,还有一个std::swap
,所以不需要你自己的。
答案 1 :(得分:5)
您通常无法完全隐藏其他客户端的功能,但您可以将其放在自己的命名空间中,这样它就不会干扰客户端代码。通常的做法是使命名空间成为主库命名空间的内部命名空间,并将其命名为details
或类似的东西。
当然,如果你需要通过ADL提供函数,那么它有来生成包含ADL应该匹配的类的命名空间。没有办法解决这个问题。