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

c – 源文件中的私有命名空间,第1张

概述我对私人方法和功能. 假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如: Suspect.h namespace Suspect { /** * \brief This should do this and that and more funny things. */ void VerbalKint(void); // This 我对私人方法和功能.
假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如:

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(如果可能的话)中定义它.通常,当您需要与课程更紧密的关系(例如,当您需要访问某些成员)时,您会选择此方法.你说这不是这个问题,但我只是重申私人会员应该被使用.

总结

以上是内存溢出为你收集整理的c – 源文件中的私有命名空间全部内容,希望文章能够帮你解决c – 源文件中的私有命名空间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存