【问题标题】:Hiding non-member functions in header files在头文件中隐藏非成员函数
【发布时间】:2011-12-23 21:39:16
【问题描述】:

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

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

例如:

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

但我不希望Swap() 干扰其他同名函数。

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

【问题讨论】:

  • 关于 Swap 干扰其他交换功能,这就是为什么发明了命名空间,使用它们!据我所知,您只能通过在类或结构中将它们设为私有来隐藏头文件中的函数。您可以仅使用此函数作为私有函数创建一个结构,并将您正在创建的类指定为朋友类。

标签: c++ templates


【解决方案1】:

传统上,命名空间details 用于实现保留的内容,必须放在标头中。

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

【讨论】:

    【解决方案2】:

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

    当然,如果您需要通过 ADL 使用功能,那么它必须位于包含 ADL 应该匹配的类的命名空间中。没有办法解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多