AssertEqueal
является неполным. Это шаблон функции, но описания шаблонных параметров нет.ax^2 + bx + c = 0
. Решаем, пишем: x = 42
. И так далее.Assert
- переводится как "Утверждать". Утверждать что-то. Значит, где-то должно быть утверждение. Но у AssertEqueal
этого утверждения нет. Более того, имя функции переводится как "Утверждать равным". Чему равным?TerminateOnDifferent
- выпилиться по разнице значений.Condition
, условие. Правый - это Reference
, норма/эталон.Terminate
однозначно читается в контексте процесса. Прозрачно и то, что по наступлении эквивалентности выхода из этой функции не будет. Следовательно, все, что можно еще сделать, это передать семантику терминации в виде причины. Третий параметр - это Reason
. Вот так, без всяких лишних hint
и Msg
, т.к. аргумент самодокументируется своим типом.template< typename TCondition, typename TReference >
void TerminateOnDifferent( TCondition&& condition, TReference&& reference, const std::string_view reason )
{
if( condition == reference )
{
return;
}
std::cout << "Termination happened due to reason: " << reason << "." << std::endl;
std::terminate();
}
true
вставлена как магическое значение. В другом месте новый параметр будет вычислен. Где-то еще значение будет прочитано из сетевого сокета или файла. T
, u
, в самом AssertEqual
- ничего не отражающих именах. В изломанной структуре кода, в кривом выравнивании блоков. Только hint
отражает свою суть, однако ничего не означает в контексте конструкции утверждений.while (run)
. Большинство обращений к SDL в неактивном состоянии шунтируются и приводят лишь к фиктивной нагрузке переходами.while (run)
- это катастрофа, так быть не должно. А вот как быть должно, сказать невозможно, т.к. оценить состояние твоего кода возможным сейчас не представляется. в цикле что-то рисуется? :)
Сегодня у тебя есть три базовых тулчейна: msbuild, clang и gcc. У каждого из них есть своя документация, в которой изложены списки всех поддерживаемых прагм.
Прагмы не стандартизированы потому что в них нет смысла с точки зрения обобщенной виртуальной машины, напрямую выполняющей код c++. Стандарт описывает именно такую виртуальную машину. В частности,
#pragma once
буквально невозможно специфицировать в рамках стандарта и поэтому она не может быть стандартной.При этом довольно обширный набор прагм уже давно является универсальным между всеми тулчейнами.
Плохой практикой является не использование прагм, а слабое понимание собственноручно написанного кода. Поэтому, определяем свой набор тулчейнов и изучаем поддерживаемые в них прагмы, необходимые в данный момент.