c – 源文件中的私有命名空间
发布时间:2020-12-16 03:35:30 所属栏目:百科 来源:网络整理
导读:我对私人方法和功能. 假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如: Suspect.h namespace Suspect { /** * brief This should do this and that and more funny things. */ void VerbalKint(void); /
我对私人方法和功能.
假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如: 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可见. 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(如果可能的话)中定义它.通常,当您需要与课程更紧密的关系(例如,当您需要访问某些成员)时,您会选择此方法.你说这不是这个问题,但我只是重申私人会员应该被使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |