add strings::FormatArgs

This commit is contained in:
Nomango 2020-07-15 16:50:18 +08:00
parent e887f1655b
commit 83b8e9013d
2 changed files with 31 additions and 9 deletions

View File

@ -30,39 +30,53 @@ namespace strings
#if defined(KGE_PLATFORM_WINDOWS) #if defined(KGE_PLATFORM_WINDOWS)
String Format(const char* format, ...) String Format(const char* format, ...)
{
va_list args = nullptr;
va_start(args, format);
String result = FormatArgs(format, args);
va_end(args);
return result;
}
WideString Format(const wchar_t* format, ...)
{
va_list args = nullptr;
va_start(args, format);
WideString result = FormatArgs(format, args);
va_end(args);
return result;
}
String FormatArgs(const char* format, va_list args)
{ {
String result; String result;
if (format) if (format)
{ {
va_list args = nullptr;
va_start(args, format);
const auto len = static_cast<size_t>(::_vscprintf(format, args) + 1); const auto len = static_cast<size_t>(::_vscprintf(format, args) + 1);
if (len) if (len)
{ {
result.resize(len - 1); result.resize(len - 1);
::_vsnprintf_s(&result[0], len, len, format, args); ::_vsnprintf_s(&result[0], len, len, format, args);
} }
va_end(args);
} }
return result; return result;
} }
WideString Format(const wchar_t* format, ...) WideString FormatArgs(const wchar_t* format, va_list args)
{ {
WideString result; WideString result;
if (format) if (format)
{ {
va_list args = nullptr;
va_start(args, format);
const auto len = static_cast<size_t>(::_vscwprintf(format, args) + 1); const auto len = static_cast<size_t>(::_vscwprintf(format, args) + 1);
if (len) if (len)
{ {
result.resize(len - 1); result.resize(len - 1);
::_vsnwprintf_s(&result[0], len, len, format, args); ::_vsnwprintf_s(&result[0], len, len, format, args);
} }
va_end(args);
} }
return result; return result;
} }

View File

@ -50,6 +50,14 @@ String Format(const char* format, ...);
/// @brief ¸ñʽ»¯×Ö·û´® /// @brief ¸ñʽ»¯×Ö·û´®
WideString Format(const wchar_t* format, ...); WideString Format(const wchar_t* format, ...);
/// \~chinese
/// @brief ¸ñʽ»¯×Ö·û´®
String FormatArgs(const char* format, va_list args);
/// \~chinese
/// @brief ¸ñʽ»¯×Ö·û´®
WideString FormatArgs(const wchar_t* format, va_list args);
/// \~chinese /// \~chinese
/// @brief ¿í×Ö·û´®×ªÕ­×Ö·û´® /// @brief ¿í×Ö·û´®×ªÕ­×Ö·û´®
String WideToNarrow(const WideString& str); String WideToNarrow(const WideString& str);