这是该问题的一个示例。我有一个很大的父函数,其中有两个子函数。实际上,此父函数位于用于其他用途的基类上,因此我不想重写父函数或包装函数以通过引用传递变量,因为其他子类继承不需要它们基地。 parentFunc也在多个线程上被调用,所以我不能仅仅将needThisInSecondWrappedFunc变量作为类级别的变量使用,因为这样会在线程之间错误地共享它。
在我看来,在父函数上创建局部变量对于两个子函数都是可见的,然后可以对parentFunc的局部变量进行操作,但事实并非如此。
#include <iostream>
void parentFunc(float& data);
void wrappedFunc(float& ref);
void secondWrappedFunc(float& ref);
void parentFunc(float& data)
{
float needThisInSecondWrappedFunc[3];
wrappedFunc(data);
secondWrappedFunc(data);
}
void wrappedFunc(float& ref)
{
needThisInSecondWrappedFunc[0] = ref * 0.5f;
needThisInSecondWrappedFunc[1] = ref * 0.5f;
needThisInSecondWrappedFunc[2] = ref * 0.5f;
}
void secondWrappedFunc(float& ref)
{
ref = needThisInSecondWrappedFunc[0] +
needThisInSecondWrappedFunc[1] +
needThisInSecondWrappedFunc[3];
}
int main()
{
float g;
g = 1.0f;
parentFunc(g);
std::cout << g << '\n';
return 0;
}
我不确定为什么wrappedFunc和secondWrappedFunc无法看到parentFunc的局部变量-我认为此时的parentFunc局部变量仍在范围内?
答案 0 :(得分:1)
在C ++中没有父函数访问的概念。
您只能访问全局范围(“全局”变量),然后才能访问当前函数内的局部变量。如果您在对象实例中,那么您也可以访问它们。
无法访问在另一个函数中声明的变量。
您需要做的是这样
void parentFunc(float& data);
void wrappedFunc(float& ref, float* needThisInSecondWrappedFunc);
void secondWrappedFunc(float& ref, const float* needThisInSecondWrappedFunc);
void parentFunc(float& data)
{
float needThisInSecondWrappedFunc[3];
wrappedFunc(data, needThisInSecondWrappedFunc);
secondWrappedFunc(data, needThisInSecondWrappedFunc);
}
void wrappedFunc(float& ref, float* needThisInSecondWrappedFunc)
{
needThisInSecondWrappedFunc[0] = ref * 0.5f;
needThisInSecondWrappedFunc[1] = ref * 0.5f;
needThisInSecondWrappedFunc[2] = ref * 0.5f;
}
void secondWrappedFunc(float& ref, const float* needThisInSecondWrappedFunc)
{
ref = needThisInSecondWrappedFunc[0] +
needThisInSecondWrappedFunc[1] +
needThisInSecondWrappedFunc[3];
}
或更妙的是,使用std::array<float, 3>
。