这是问题的玩具示例。我有一个很大的父函数,其中调用了两个子函数。实际上,这个父函数位于用于其他用途的基类上,所以我不想重写父函数或包装函数以通过引用传递变量,因为其他继承的子类不需要它们基地。 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 局部变量仍然在范围内?
最佳答案
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>
.
关于c++ - 访问调用函数的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53972413/