簡體   English   中英

c++:可變參數 function 的兩個問題:int 轉換錯誤並通過 arguments

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM