Это может быть или не быть уместным здесь, но полезно напомнить себе, что существует дикий мир, выходящий за рамки классов и объектов, где функции могут свободно перемещаться.
Например, недавно я нуждался взакрыть (единый глобальный статический) системный журнал ошибок из глобального обработчика исключений на основе порта чужого кода.Обычный включаемый файл для моего журнала ошибок конфликтовал с кодом обработчика исключений, потому что оба хотели включить «windows.h» по причинам, которые я не изучал.Когда этот и другие вопросы убедили меня, я не смог сделать предварительное объявление функций-членов моего класса ErrorLog, я сделал так, что обернул необходимые функции в глобальную функцию области видимости:
void WriteUrgentMessageToErrorLog( const char * message )
{
ErrorLog::LogSimpleMessage( message );
ErrorLog::FlushAccumulatedMessagesToDisk();
}
Некоторые люди оченьособенно о поддержании целостности структуры их классов любой ценой ... и редко признают, что приложения, использующие эти классы, неизбежно создаются поверх чего-то, что не имеет такой структуры.Но он там и используется разумно, у него есть свое место.
Учитывая возраст этого вопроса, я не стал подробно изучать его актуальность.Все, что я хотел поделиться, - это мнение, что иногда такой простой механизм обертывания является гораздо более чистой и понятной альтернативой чему-то, что имеет гораздо больше тонкости и хитрости.Тонкость и сообразительность имеют тенденцию меняться в более поздние сроки кем-то, кто должен добавить к этому, кто не полностью понимает это.Прежде чем вы это знаете, у вас есть ошибка ...