Основная проблема заключается в том, что вы не можете напрямую ссылаться на переменную вне тела if
.
Простой обходной путь - указатель вашего типа во внешней области видимости по умолчанию установлен на nullptr
, затем используйте static
или thread_local
в if
и установите для внешнего указателя области следующее:
Foo* f = nullptr;
if (/*condition*/){
static Foo foo;
f = &foo;
}
Вы можете сделать типы const
по мере необходимости.Другим подходом может быть использование std::variant
или std::optional
.
Если, однако, вы реализуете что-то в качестве средства, чтобы секция кода выполнялась только один раз, стандартный способ сделать этоиспользуйте
std::once_flag flag;
std::call_once(flag, []{/* ToDo - code here */});