Это игрушечный пример проблемы.У меня есть большая родительская функция, которая, помимо прочего, вызывает две дочерние функции.В действительности, эта родительская функция находится в базовом классе, используемом для других целей, поэтому я не хочу переписывать родительскую функцию или упакованные функции для передачи переменных по ссылке, поскольку они не понадобятся для наследования других дочерних классов.база.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 могут 't увидеть локальные переменные parentFunc - я думал, что локальные переменные parentFunc все еще будут в области действия в этот момент?