假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如:
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 – 源文件中的私有命名空间所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)