Я пытаюсь переопределить макрос Variadic для использования cout вместо printf. Вот исходный код:Преобразовать __VA_ARGS__ в строку
#define LOGE(...) PRINT_LEVEL(1, __VA_ARGS__);
#define PRINT_LEVEL(level,...) do { \
if (debug_components.DEBUG_COMPONENT >= level) \
{ printf("[%s]: ", levels_strings[level-1]); printf(__VA_ARGS__); printf("\n"); } \
}while(0)
я преобразовал это следующее использовать соиЬ вместо Printf:
#define PRINT_LEVEL(level,...) do { \
if (debug_components.DEBUG_COMPONENT >= level) \
{ std::string argString; sprintf(argString, __VA_ARGS__); std::cout << "[" << levels_strings[level-1] << "]" << argString << "\n";} \
}while(0)
По какой-то причине, __VA_ARGS__
отлично работает с Printf, но НЕ Sprintf. Он также не работает с cout. Я хотел бы знать правильный способ конвертировать __VA_ARGS__
в строку или, если это не так, правильный способ просто распечатать ее с помощью cout.
Будьте осторожны, snprintf возьмите буфер для первого аргумента. – Hugal31
Все еще не работает. См. Отредактированный код выше; теперь я получаю следующую ошибку: – user1765354
Функция кандидата не жизнеспособна: неизвестно преобразование из 'std :: string' (aka 'basic_string') в 'char * __ ограничивать' для 1-го аргумента extern int sprintf (char * __restrict __s, –
user1765354