c – 源文件中的私有命名空间

前端之家收集整理的这篇文章主要介绍了c – 源文件中的私有命名空间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对私人方法功能.
假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户方法.例如:

Suspect.h

namespace Suspect {
  /**
  *  \brief This should do this and that and more funny things.
  */
  void VerbalKint(void);  // This is for you to use
}

Suspect.cpp

namespace Suspect {
  namespace Surprise {
    /**
    * \brief The user doesn't need to be aware of this,as long 
    *        the public available VerbalKint does what it should do.
    */
    void KeyserSoze(void) {
      // Whatever
    }
  } // end Surprise

  void VerbalKint(void) {
    Surprise::KeyserSoze();
  }
}

所以,这个布局工作.当包含Suspect.h时,只有VerbalKint可见.
这可以使用类实现,并将VerbalKint标记为静态:

class Suspect {
public:
  // Whatever
  static void VerbalKint(void);
private:
  static void KeyserSoze(void);
};

我想知道这两种方法之间是否存在差异.比另一个更好(更快,更容易维护)吗?

你怎么看?

解决方法

如果函数是“free”,那么你应该在* .cpp中使用一个匿名命名空间:
namespace Suspect {
namespace Surprise {
namespace {
    void KeyserSoze(void) {
      // Whatever
    }
} // end anon
} // end Surprise
} // end Suspect

甚至:

namespace {
    void KeyserSoze(void) {
      // Whatever
    }
} // end anon

这使它远离客户端,因此在链接时无法访问,依赖或与您的出口相冲突.它还保留了不必要的声明,减少了编译时间,可能链接时间或二进制大小,如果定义是可见的.最后,它使它私有,所以他们不能依赖它,你不需要维护它供他们使用.如果您选择(KeyserSoze()的函数指针)),您仍然可以将它们传递给外部世界.

在其他时候,最好在你的类中声明一个私有成员函数,然后在* .cpp(如果可能的话)中定义它.通常,当您需要与课程更紧密的关系(例如,当您需要访问某些成员)时,您会选择此方法.你说这不是这个问题,但我只是重申私人会员应该被使用.

原文链接:https://www.f2er.com/c/110941.html

猜你在找的C&C++相关文章