c++ - 在命名空间 C++ 中隐藏变量

标签 c++ namespaces

我有一个旨在执行递归计算的函数。如果我的函数是递归编程的,计算时间太长。因此,我通过将中间结果存储在数组中来执行内存。

在我的程序执行期间,我可能会使用参数 (10,0)(5,5)(2,4 ) 等。因此我有一个 setup(double x) 函数,它用正确的值填充整个数组。然后我可以访问任何数组值而无需任何进一步计算。我只等到 x 更改后再次调用 setup()

我想知道如何在 C++ 中实现它。使用类对我来说没有意义,因为我永远不需要创建关联的对象。我已经在命名空间中很好地实现了这些功能,但我仍然遇到问题。即使我使用未命名的命名空间,我的函数使用的数组也是可见的,并且可以从函数的命名空间外部进行修改。如果我包含命名空间的头文件,那就是。

我的代码:

FunctionWrapper.h

namespace FunctionWrapper{
      namespace{
            double tempArray[10][10];
      }

      void setup(double x);
      void getValues(int n);
}

main.cpp

#include "FunctionWrapper.h"

int main(){
   FunctionWrapper::tempArray[0][0] = 5; //Works
}

最佳答案

如果您不希望tempArray 在其他源文件中可命名,请不要在头文件中声明它。相反,在 FunctionWrapper.cpp 中的未命名命名空间中声明它。然后,它只能直接从该源文件中使用。

一般来说,头文件不应使用未命名的命名空间,因为它可能(而且经常会)导致违反单一定义规则。

请注意,实际上,更好的解决方案可能是创建一个提供此功能的类:

class ValueGetter
{
public:
    ValueGetter(double x);
    void GetValues(int n);

private:
    double cache[10][10];
};

通过这种方式,您可以创建该类型的实例,并且所有状态都归该实例所有。避免全局状态有很多好处,包括提高可维护性和可测试性。

关于c++ - 在命名空间 C++ 中隐藏变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8781588/

相关文章:

c++ - 我如何为数学公式创建命名空间

python - 如何从回调函数访问(和编辑)变量?

python - __init__.py imports 还暴露了我使用的模块,而不仅仅是我自己的类

python - 如何将 tensorflow.keras 模型移动到 GPU

c++ - Delphi:从导出接口(interface)/类的 vc++ dll 调用函数

c# - 在另一个文件中使用一个文件的方法

c++ - 可以更改的const变量可以用于在C和C++中声明和定义数组吗?

c++ - Makefiles,从 VC6 迁移到 Visual Studio 2010

C++ 延迟日志记录(无 C++11)

c++ - 使用 boost::program_options 的首选跨平台 'main' 定义是什么?