在C++中将静态类转换为命名空间时如何处理私有成员函数?

Igo*_*Oks 6 c++ static namespaces private

我有一个类有5个静态公共函数和1个静态私有函数(从一个公共函数调用).该类没有任何成员变量.在我看来,它应该是一个命名空间而不是一个类.但是如何处理私有功能呢?我更喜欢它不被每个命名空间用户访问,但命名空间中没有访问控制.

Joh*_*itb 13

我知道有两种方式

不要在标题中声明它们

一种方法是不在头部内声明这些功能.它们只能放在实现文件中的未命名命名空间中.

实际上,您必须实现在实现文件中访问此私有函数的任何函数(不在标题中内联).

将它们放入详细命名空间

最好将它们放在不同的标题中,并包含它们.因此,它们的代码不会打扰您的接口标头.这也是怎么boost做的:

#include "detail/destroy.hpp"

namespace orbit {
  void destroy() {
    detail::destroy_planets();
    detail::destroy_stars();
  }
}
Run Code Online (Sandbox Code Playgroud)


Ara*_*raK 8

我不认为有这个解决方案:)

一个不同的解决方案是将这些函数分成单独的编译单元,然后在匿名命名空间内声明私有函数.