c++:variadic函数的两个问题:int转换错误和传递参数



我正在写一个日志类,为了有用,我需要一个类似于printf:的可变函数

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");
}
}

该功能有两个问题:

首先,显然我不能简单地将fmt传递给snprintf(),但我不知道如何实现这一点?

其次,当我的程序调用Logger:log((时,第一个变参数是整数,它在编译时抛出一个错误invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]

这是有问题的调用,位置x和位置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");
}
}

相关内容

  • 没有找到相关文章

最新更新