나는 문자열을 포맷하는 기능을 가지고 :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", "");
경고가의 템플릿 기능에없는 표시됩니다 전화 사이트에서.
템플릿 기능이 아닌 통화 사이트에서 형식 경고를 표시 할 수 있습니까?
을 둘 다 동일한 코드를 생성 듯 https://godbolt.org/ 와 당신의 코드는 '경고가 템플릿 사이트에 표시되고 호출 사이트에는 표시되지 않습니다.'라는 의미를 밝히지 않습니다. [mcve]가 필요했습니다. –
sprintf를 호출 할 때 포맷 함수 내에 경고가 생성됩니다. 호출 기능 - 형식 함수를 호출 할 때 오류가 호출 사이트에 표시되어야합니다. format() 함수 내부에 경고 메시지가 표시되고 함수 호출자가 100 명인 경우 오류가 발생한 위치를 추적하기가 매우 어렵습니다. –