我有一个格式化字符串的函数:C++格式字符串宏
template<typename ... Args>
inline std::string format(const std::string & format, Args ... args)
{
std::size_t size = MINIGINE_FORMAT_PRINTF(nullptr, 0, format.c_str(), args ...) + 1; // +1 for NULL terminated
std::unique_ptr<char[]> buf(new char[ size ]);
MINIGINE_FORMAT_PRINTF(buf.get(), size, format.c_str(), args ...);
return std::string(buf.get(), buf.get() + size - 1); // -1 we don't want NULL terminated
}
的问题是,当我调用该函数:
format("%d", "");
警告显示在模板函数,不在呼叫现场。
是否可以在呼叫站点显示格式警告,而不是在模板化功能中显示?
你代码没有阐明你的意思,“警告显示在模板化功能中,而不是在呼叫现场”。 [mcve]需要。 –
当调用sprintf时,格式函数内部会生成警告。该错误应显示在呼叫站点 - 即调用格式功能时。当我在format()函数中得到警告并且函数有100个调用者时,很难找出错误源自的地方。 –