Как Вы организуете свои заголовки STL?

Я думаю, что ваши фильтры не совсем верны.

Выражение фильтра должно быть:

"expression": "SourceContext = 'Microsoft' or StartsWith(SourceContext, 'Microsoft.')"

(я думаю, вы могли бы просто сделать StartsWith(SourceContext, 'Microsoft') без последней точки, но тогда это может не работать должным образом для пространств имен, подобных MicrosoftOrIsItReally.MyNamespace)

(внутренне Matching.ForSource выполняет фильтрацию SourceContext.StartsWith(..), как показано в источнике )

Чтобы подтвердить это, вы можете отредактировать outputTemplate ] вашего приемника файлов, чтобы отобразить свойство SourceContext и увидеть происхождение событий журнала. (по умолчанию установлено значение "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"). Вы можете изменить его на "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}]<{SourceContext}> {Message:lj}{NewLine}{Exception}", чтобы включить свойство SourceContext.


Кстати, у вас есть лишняя, ненужная директива "Using". "Serilog.Settings.Configuration" не является необходимым

10
задан Rob 12 November 2008 в 09:50
поделиться

4 ответа

Я только включаю заголовочные файлы, которые действительно необходимы в каждом источнике, и не 'ловят все' заголовки, для хранения зависимостей (и следовательно время компиляции) как низко как возможных.

Предварительно скомпилированные заголовки могут работать независимо от этого (т.е. Я полагаюсь на предварительно скомпилированные заголовки, чтобы ускорить процесс компиляции, не получить объявления). Таким образом, даже если что-то объявляется через включенные предварительно скомпилированные заголовки, я все еще включаю 'обычный' заголовок, который будет пропущен включать защитным механизмом и не добавит ничего значительного ко времени компиляции.

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

Основное преимущество наличия зависимостей максимально низко состоит в том, что рефакторинг становится легче (или скорее: выполнимый)

Замечательная книга по всему этому является Крупным масштабом Дизайн C++ от Lakos

16
ответ дан 3 December 2019 в 18:36
поделиться

То, что я делаю, включают все заголовки STL, в которых я испытываю необходимость во всем проекте в моем единственном предварительно скомпилированном заголовке, обычно StdAfx.h по умолчанию. Предварительно скомпилированный заголовок является фактической первой вещью настроить в проекте, включая все STL-/boost-/platform заголовки и сторонние библиотеки.

STL и повышение аккуратно расположены в пространствах имен, таким образом, они никогда не вызывают путаницы, или накладывается также.

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

2
ответ дан 3 December 2019 в 18:36
поделиться

Можно объединить эти два метода:

Имейте и .cpp - файлы включают и также добавляют его к stdafx.h. Это все еще даст Вам оптимизацию PCH.

.cpp - файлу все еще нужно к #include "stdafx.h", таким образом, его независимость спорна. Однако зависимость является состоянием explicitely, и удаление stdafx.h включает, более просто, чем нахождение, что все отсутствие включает. Кроме того, стандартные заголовки - как все заголовки должны - удостоверяться, что они не включены дважды.


Обычно я соглашаюсь с Вашим подходом сделать каждый файл "независимым", т.е. когда .cpp добавляется к другому проекту, или.h включен, он заботится о своих зависимостях.


Помните, что PCH является компромиссом, они могут стать огромными. Необходимость к большому количеству главным образом неиспользованного кода в PCH может на самом деле замедлить Ваши сборки. Быстрые диски помогают много, хотя :)

Также знайте, то включение предварительно скомпилировало заголовки в MSVC, по крайней мере, в некоторых версиях, на самом деле изменяет обработку: объявления перед #include "stdafx.h" проигнорированы, таким образом, это должно быть Вашим первым положением некомментария. Ужасная ловушка.

2
ответ дан 3 December 2019 в 18:36
поделиться

Полностью согласуйте с предложением для книги John Lakos Крупный масштаб Дизайн C++.

Объявите все заголовки, необходимые для файла, или.h или .cpp, в самом файле. Не полагайтесь на побочные эффекты файлов, включенных другими заголовочными файлами.

Наличие большого заголовочного файла, перечисляющего все, включает зависимости от увеличений излишне и делает дизайн очень хрупким.

О, еще одна вещь никогда не имеют объявления использования в заголовочном файле. Только когда-либо используйте их в своих файлах реализации, .cpp файлы.

HTH.

удачи,

Ограбить

1
ответ дан 3 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: