Ghost2
> Поднимите руки те, кто использует глобальный логгер, а не передает его
> конкретную реализацию в функции и конструкторы.
Глобальные переменные применимы там, где нужен всегда только 1 инстанс на весь процесс. Логгер - как раз из таких вещей. У меня например еще часто менеджер загружаемых текстур глобальный. Ну просто потому, что нет смысла грузить один и тот же файл дважды.
Ghost2
> Поднимите руки
Опускаю руки. 321 раз передал :(
Ghost2
Вопрос не стоит в том, как добраться до метода, который содержит логику логирования. Это может быть вообще свободная функция, передавать нечего. Вопрос в том, как передавать аргументы в этот метод. Аналогом того, что предложил иванарок, было бы текст и уровень логирования записывать в глобальные переменные, а потом вызывать log() без параметров.
Так-то я не против глобальных переменных в принципе. В частности я сторонник синглтонов. Но тут могут быть разные мнения.
entryway
> 321 раз передал :(
Поклоняешься богу Dependency Injection?
MrShoor
> Логгер - как раз из таких вещей
База. Только таких вещей может быть для конкретного проекта овермного (у меня тут embedded деформация, так что не суди строго). И плюсов размазывать эту ерунду, в виде зависимостей по проекту, я не вижу никаких.
Alprog
> было бы текст и уровень логирования записывать в глобальные переменные
Не, ну это совсем плохо.
Dmitry_Milk
> Поклоняешься богу Dependency Injection?
У меня такая привычка с С#, перенес её и в С++. Во многих случаях довольно полезно.
JordanCpp
> Во многих случаях довольно полезно
Использовать такое вручную мне кажется каким-то мазохизмом. По крайей мере для некоторых скриптовых языков, куда удосужились в послежние годы завести аннотацию типов, бывает поддержка со стороны фреймворков, когда такие аргументы тебе заполняет фреймворк, ориентируясь на анонсированный тип аргумента, не требуя руками из функции в функцию таскать, в то же время при ручном конструировании объекта оставляя возможность подсунуть свою реализацию.
Alprog
> Выходит это не обман самих себя, а передавать переменую через функцию
> действительно лучше, чем просто глобальная переменная?
ты не понял о чём речь. Или делаешь вид, что не понял.
> Если ты передавал локальную переменную в функцию, а теперь передаёшь
> глобальную, то ты ничего не изменил.
а, ну понятно, явно не понял о чём речь. Подумай ещё раз о чём я говорил (если тебе это вообще интересно, а не просто языком потрепать).
Mirrel
> ты не понял о чём речь
Нет, это ты не понял о чём была речь, когда начал мне что-то про мои предубеждения и самообман рассказывать.
И ведь я тебе несколько раз уже пояснил, что я говорил не о какой-то абстрактной ситуации в вакууме на вымышленных языках и компиляторах, а о вполне конкретной функции во вполне конкретном проекте, который компилируется конкретными компиляторами. И я пояснил тебе, что в этом конкретном примере будет только ухудшение производительности и масштабируемости. Давно бы уже мог признать, что зря быканул неразобравшись, и уйти в закат.
Но ты продолжаешь упорно настаивать, что я где-то не прав. Конкретно процитируй, где я неверно говорю о глобальных переменных. Или ты только языком потрепать, а за слова не отвечаешь?
Alprog
> Нет, это ты не понял о чём была речь
всё как обычно. Зачем ты меня спрашиваешь о чём-то? Если ты лучше меня знаешь о чём я писал.
Я же тебе уже писал. Будь правым. Не оправдывайся.
Mirrel
> Зачем ты меня спрашиваешь о чём-то?
Я тебя ни о чём не спрашиваю, кроме риторического вопроса в конце. Он не требует ответа.
Всё остальное я утверждаю. Я утверждаю, что ты зря быканул, а когда тебе пояснили контекст, начал сливаться и вилять жопой, что думал о другом компиляторе, что писал быстро и с ошибками, что вообще не то имел в виду и так далее. И делаешь это до сих пор.
/A\
> По той же логике можно сделать is_invocable_with_exceptions который вернет
> false и все будут считать, что исключения не кидаются.
Ну вот не все, как минимум я и цпп-комитет так не считаем.
/A\
ранее же уже обсуждали noexcept и говорили что это всего лишь подсказка компилятору которая на совести программиста и никаких проверок со стороны компилятора что реальных исключений не произойдет быть не может. Просто компилятор сгенерирует код исходя из того что исключение быть не может, а если оно случится, то UB.
Aroch
> и никаких проверок со стороны компилятора что реальных исключений не произойдет
> быть не может
Вот это кстати дич. Пользовательские исключения вполне можно было бы чекать на этапе компиляции.