[英]c++: Two issues with variadic function: int conversion error and passing arguments
我正在編寫一個日志記錄 class 並且為了有用,我需要一個類似於 printf 的可變參數 function:
void Logger::log(std::string message, int level, const char* fmt...) {
int bufferSize = 1000;
char buffer[bufferSize];
int cx = snprintf(buffer, bufferSize, message.c_str(), fmt);
if (cx >= 0 && cx < bufferSize) {
Logger::log(buffer, level);
} else {
Logger::error("Logger Error with variadic arguments");
}
}
function有兩個問題:
首先,顯然我不能簡單地將fmt
傳遞給snprintf()
,但我不知道如何實現這一點?
其次,當我的程序使用第一個可變參數為 integer 調用 Logger:log() 時,它會在編譯時拋出invalid conversion from 'int' to 'const char*' [-fpermissive]
:
這是有問題的調用,pos.x 和 pos.y 都是 int:
Logger::log(" %d/%d", Logger::LVL_DEBUG, dirty->pos.x, dirty->pos.y);
相比之下,這有效: Logger::log(" %s", Logger::LVL_DEBUG, "hello World");
感謝上面的所有人,我通過改組參數並使用 vsprintf() 解決了這個問題
void Logger::log(int level, const char* fmt...) {
va_list args;
va_start(args, fmt);
int bufferSize = 1000;
char buffer[bufferSize];
int cx = vsprintf(buffer, fmt, args);
va_end(args);
if (cx >= 0 && cx < bufferSize) {
Logger::log(buffer, level);
} else {
Logger::error("Logger error while using dynamic parameters");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.