隐藏头文件中的非成员函数

时间:2011-12-23 21:39:17

标签: c++ templates

我想知道我是否可以在头文件中定义一些函数,然后在同一个头文件中使用它们,同时将它们隐藏在其他任何文件中?

例如,我可以先定义一些通用的辅助函数(特定于数据结构),然后在使用这些函数的同一个头文件中定义一些数据结构吗?

例如:

template<class T>
void Swap(T &a, T &b)
{
  T temp = a;
  a = b;
  b = temp;
}

但我不希望Swap()干扰其他具有相同名称的功能。

我可以把它变成一个私有方法,但是我必须为每个使用它的类提供相同的实现,或者让它们成为朋友类......

2 个答案:

答案 0 :(得分:6)

传统上,名称空间details用于必须包含在标题中的实现保留内容。

此外,还有一个std::swap,所以不需要你自己的。

答案 1 :(得分:5)

您通常无法完全隐藏其他客户端的功能,但您可以将其放在自己的命名空间中,这样它就不会干扰客户端代码。通常的做法是使命名空间成为主库命名空间的内部命名空间,并将其命名为details或类似的东西。

当然,如果你需要通过ADL提供函数,那么它来生成包含ADL应该匹配的类的命名空间。没有办法解决这个问题。