Предположим, что у меня есть функция с именем caller, которая вызовет функцию с именем callee:
void caller()
{
callee();
}
Теперь вызывающий вызов может быть вызван много раз в приложении, и вы хотите, чтобы вызываемый вызывался только один раз. (вроде ленивой инициализации), вы можете реализовать его с помощью флага:
void caller()
{
static bool bFirst = true;
if(bFirst)
{
callee();
bFirst = false;
}
}
Мое мнение для этого - это нужно больше кода, и ему нужно еще одну проверку в каждом вызове функции caller.
Лучшим решением для меня является следующее: (предположим, что callle возвращает int)
void caller()
{
static int ret = callee();
}
Но это не может справиться с тем, если callee возвращает void, мое решение использует выражение для запятой:
void caller()
{
static int ret = (callee(), 1);
}
Но проблема заключается в том, что выражение для запятой не пользуется популярностью, и люди могут запутаться, когда видят эту строку кода, что вызывает проблемы для обслуживания.
Есть ли у вас хорошая идея, чтобы функция вызывалась только один раз?