Не актуальная проблема, но я ищу шаблон для улучшения следующей логики:
void PrintToGameMasters()
{
std::string message = GetComplicatedDebugMessage(); // This will create a big string with various info
for (Player* player : GetAllPlayers())
if (player->IsGameMaster())
player->SendMessage(message);
}
Этот код работает, но у меня есть проблема в том, что в большинстве случаев нет игроков gamemasters
, поэтому составление сообщения будет сделано даром.
Я хотел бы написать что-то, что могло бы создать сообщение только при первом использовании этой переменной, но я не могу найти здесь хорошего решения.
ОБНОВЛЕНИЕ:
Чтобы сделать этот вопрос более точным, я ищу решение, которое не относится к строкам, это может быть тип без функции, чтобы проверить, инициализируется ли она.
Также большие бонусные баллы, если мы сможем удержать вызов GetComplicatedDebugMessage
на вершине цикла, я думаю, что решение, включающее обертку, решит эту проблему.