Войти
ПрограммированиеФорумОбщее

Логгер с автоматическими секциями (4 стр)

Страницы: 1 2 3 4
#45
20:59, 8 апр. 2016

Kartonagnick
Не, топикстартер хочет совсем без макросов, даже если тот ничего толком не делает. Ответ на вопрос "зачем?" остается исключительно на его совести.

Suslik
> Как можно избежать придумывания ненужных имён для каждого SectionGuard'а вроде s0/s1?
Подозреваю, что ответом будет "строго никак" =(.
1. Для автоматического закрытия секции придется использовать RAII.
2. RAII требует объекта, срок его жизни для этой задачи должен быть больше одного выражения, т. е. это переменная, а значит совсем без имени не обойтись.
3. Переменные в С++ в пределах одной секции { ... } переопределять нельзя, остается определять одноименные переменные в разных (по вложенности) секциях.
4. Вложенные секции можно открывать-закрывать руками или воспользоваться секциями от if/for/while -- но и то, и то без макросов выглядит как порнография.

Для того, чтобы решение было, нужно чтобы оказалось неверным одно из пронумерованных утверждений выше.

#46
21:02, 8 апр. 2016

Cfyz
> Не, топикстартер хочет совсем без макросов, даже если тот ничего толком не
> делает. Ответ на вопрос "зачем?" остается исключительно на его совести.

под макросом создается логгер-гвард, которому сливаются данные о местонахождении: имя исходника, строка, имя функции.
опционально - аргументы с которыми была запущена функция.

смысл не меняется: это один единственный на весь скоуп локальный гвард.
нет причин создавать несколько штук на скоуп
нет причин придумывать им имена.

#47
22:51, 8 апр. 2016

Suslik
Упростил твой упрощённый вариант. Вкратце:

{ auto _ = log.section("first");

  // ...

  { auto _ = log.section();

    // ...
  }

  // ...
}
+ Показать

http://rextester.com/DGW81168
Страницы: 1 2 3 4
ПрограммированиеФорумОбщее

Тема в архиве.