我对私人方法和功能.
假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如:
假设我有一些不需要在一个类中的实用方法.但是这些相同的方法需要调用其他不想暴露给用户的方法.例如:
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(如果可能的话)中定义它.通常,当您需要与课程更紧密的关系(例如,当您需要访问某些成员)时,您会选择此方法.你说这不是这个问题,但我只是重申私人会员应该被使用.