我有一个旨在执行递归计算的函数。如果我的函数是递归编程的,计算时间太长。因此,我通过将中间结果存储在数组中来执行内存。
在我的程序执行期间,我可能会使用参数 (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/