我有一個格式化字符串的函數: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個調用者時,很難找出錯誤源自的地方。 –