c++ - 非类函数可以私有(private)化吗?

标签 c++

我在我创建的命名空间中有一些函数,这些函数在我的整个程序中都在使用。

在头文件中:

namespace NQueens
{
    static int heur = 0;
    int CalcHeuristic(char** state, int size);
    void CalcHorzH(char ** state, int &heuristic, int size);
    void CalcColH(char ** state, int &heuristic, int size);
    void CalcDiagH(char ** state, int &heuristic, int size);
    int calcCollisions(int queensPerRow, int size);
}

一切正常。但是,从我的外部程序代码实际调用的唯一函数是 CalcHeuristic(char** state, int size) 函数。 这个函数然后调用其他函数本身。

因为这些不属于一个类,所以我的编译器不会让我将其他函数声明为 private。有没有办法做到这一点?我应该为此担心吗?

最佳答案

不要在 header 中声明它们,将它们放在实现文件中的匿名命名空间中。

标题示例:

namespace NQueens
{
    int CalcHeuristic(char** state, int size);
}

示例实现:

namespace
{
    static int heur = 0;
    void CalcHorzH(char ** state, int &heuristic, int size);
    void CalcColH(char ** state, int &heuristic, int size);
    void CalcDiagH(char ** state, int &heuristic, int size);
    int calcCollisions(int queensPerRow, int size);
}

namespace NQueens
{
    int CalcHeuristic(char** state, int size)
    {
        // ...
    }
}

namespace
{
    void CalcHorzH(char ** state, int &heuristic, int size) {}
    void CalcColH(char ** state, int &heuristic, int size) {}
    void CalcDiagH(char ** state, int &heuristic, int size) {}
    int calcCollisions(int queensPerRow, int size) { return 0; }
}

关于c++ - 非类函数可以私有(private)化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32953165/

相关文章:

支持 OpenGL 的 C++ GUI 工具包

c++ - 如何使用 for-each 循环扫描 int 数组对象?

c++ - 为什么 C 中的 double 打印的十进制数字比 C++ 少?

c++ - OpenCV2.4错误: No GPU support in unknown function file

c++ - unordered_map 的用户定义哈希函数

c++ - 无效转换、未指定行为和字符数组?

C++通过数组访问多个成员

c++ - 第一行主要功能的术语是什么?

C++ 复制构造函数链接堆栈

c++ - 在实例之间共享方法的局部静态变量有任何风险吗?