Я уже использовал boost::format во многих случаях, но я нашел один, для которого реализация Windows не реагирует так, как я ожидал, потому что она выдает исключение
boost::bad_format_string: format-string is ill-formed
Я использую макрос для определения формата вывода шестнадцатеричных чисел для разных платформ:
#if (defined(WIN32) || defined(WIN64))
#define FORMATUI64X_09 "%09I64X"
#define FORMATUI64X_016 "%016I64X"
#else
#if defined __x86_64__
#define FORMATUI64X_09 "%09lX"
#define FORMATUI64X_016 "%016lX"
#else
#define FORMATUI64X_09 "%09llX"
#define FORMATUI64X_016 "%016llX"
#endif
#endif
и формат вызова, как показано ниже:
string msg = (boost::format("0x"FORMATUI64X_016"(hex) \t %i \t %d \t %s \t %i\t ") % an uint64_t % an int % an uint % a char* % an uint).str();
Обратите внимание, что я использую синтаксис, отлично работающий с 'fprintf'.
Я полагаю, что это происходит из формата «uint64_t» в виде гекса, но знаете ли вы, как написать одну и ту же строку так, чтобы она работала для всех платформ?