2014-10-10 93 views
0

我知道,如果您想定义静态函数,那么在C++中首选命名空间,但是当您具有访问其他函数但其他函数应该是私有的函数时不应执行的操作可以被他人访问。如何声明/定义它?使用类不会很简单吗?还是必须仍然使用命名空间?C++ 11命名空间或具有私有变量的类

像这样:

class Test1 
{ 
public: 
    static void Start() 
    { 
     if(1) // Some checks... 
     { 
      ProcessStart(); 
     } 
    } 

private: 
    static void ProcessStart() 
    { 
     if(!Initialized) 
     { 
      //Initialize 
     } 

     // Do other stuff 
    } 

    static bool Initialized; 
}; 

bool Test1::Initialized = false; 
+0

如果需要在.h中正确定义函数,则可以在“public”命名空间中使用具有特殊名称的命名空间。通常这个名字空间被命名为'detail'。看一看libstdC++或者boost头文件以获得所有血腥细节的想法 – user3159253 2014-10-10 21:41:09

+0

实际上,对于TU本地符号的“静态”弃用在C++ 11中被收回。 – Deduplicator 2014-10-10 22:10:46

回答

4

你并不需要的公共API中暴露私人信息:

foo.hpp:

#ifndef H_FOO 
#define H_FOO 

namespace Foo 
{ 
    void Start(); 
} 

#endif 

Foo.cpp中:

#include "foo.hpp" 

namespace Foo 
{ 
    namespace 
    { 
     void ProcessStart() 
     { 
      // ... 
     } 
    } 

    void Start() 
    { 
     ProcessStart(); 
    } 
} 

只有头文件才会出现在您的公开目录/include中,所以没人会知道有私有实现函数(可能除了调试器)。

+0

但功能PrivateStart不是“私人”,因为它具有外部链接。它仍然可以访问。 – PeterAppleTree 2014-10-10 21:40:49

+0

对不起,我还没有看到匿名命名空间。 – PeterAppleTree 2014-10-10 21:43:05

+0

你知道,使用'static'已经被弃用了。 – Deduplicator 2014-10-10 22:11:55

相关问题