чтобы можно было подставить описание ошибки через fmt::format, либо если нет параметров, то описание генерится автоматически. Собственно проблема в том, как это засунуть в один макрос, чтобы макрос был один и тот же не зависимо от числа параметров?
https://godbolt.org/z/7xWovG1Pv
Ну, и в чём проблема?
std::string make_message(char const * cond); template<typename... Args> std::string make_message(char const *, char const * format_str, Args...); #define ASSERT(cond, ...) \ if (!(cond)) throw std::logic_error(make_message(#cond, ## __VA_ARGS__));
"Перегружать" макросы без BOOST_PP или кучи хелперных макросов (типа подсчёта количества аргументов) - больно, поэтому проще сводить задачу к перегрузке функций (см. сообщение выше). Конкретно с __FILE__, __LINE__ я бы советовал передавать их в функцию сырыми, а там уже обрабатывать на свой вкус, чтобы минимизировать количество кода непосредственно в макросе.
Ну тут минус, что в макросе оно не делает лишних телодвижений в рантайме
от макросов надо держаться подальше в 99% случаев
Спасибо за совет, но я просто держусь подальше от C++
Ну имеют смысл они, если код писать под разные платформы или для отладки какой-нибудь
Видимо рабочий вариант. Спасибо
И ты на Раст съехал?
Ну я давно уже сам не пишу на C++, только другим рассказываю как это здорово :)
Обсуждают сегодня