2012-01-06 61 views
2

我有一个执行计算的功能,我希望能够从我的程序中的任何位置调用此函数。我知道在Java中,我会在类中创建一个public static方法。C++中的辅助方法及其可见性

到目前为止,在C++中,我创建了一个用于我的特殊功能的namespace。我遇到的问题是这个函数使用它自己的帮助函数。我希望这些较低级别的功能不可见(即私人),但我不确定如何去做。

到目前为止,我有这样的代码:

namespace HelperCalc{ 

    int factorial(int n){ 
     return n <= 1 ? 1 : n*factorial(n-1); 
    } 

    double getProbability(int x, int y){ 
     .....//do maths 
     .... = factorial(x); 
    } 
} 

因此,例如,我会到能够调用getProbability(),但我想“隐藏” factorial()

回答

4

使用匿名命名空间(一个源文件中,而不是头):

namespace { 
    int factorial(int n){ 
     return n <= 1 ? 1 : n*factorial(n-1); 
    } 
} 

namespace HelperCalc{ 
    double getProbability(int x, int y){ 
     .....//do maths 
     .... = factorial(x); 
    } 
} 
+0

辉煌,这是我需要的。 – rogerDorsey 2012-01-06 22:06:15

+0

只是问......这是否比在源文件中定义函数更好,没有名称空间? – 2012-01-06 22:15:24

+1

是的,因为如果你声明它们没有匿名命名空间,只要它们声明了这个函数,它们仍然可以被其他翻译单元/源文件访问。其他翻译单元不能访问匿名命名空间中的函数。 – 2012-01-06 22:18:17

2

独立宣言和你想成为公众的函数的定义。 在实现文件中定义公共函数和辅助函数。

namespace.h

namespace X 
{ 
    void public_function(); 
} 

namespace.cpp

// An anonymous namespace means functions defined within it 
// are only available to other functions in the same source file. 
namespace { 
    void helper_function() 
    { 
     // ... 
    } 
} 

namespace X 
{ 
    void public_function() 
    { 
     helper_function(); 
    } 
}