// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_STRINGS_STRINGPRINTF_H_ #define BASE_STRINGS_STRINGPRINTF_H_ #include // va_list #include #include #include "base/base_export.h" #include "base/check.h" #include "base/compiler_specific.h" #include "third_party/abseil-cpp/absl/strings/str_format.h" namespace base { // Returns a C++ string given `printf()`-like input. The format string must be a // compile-time constant (like with `std::format()`), or this will not compile. // TODO(crbug.com/40241565): Replace calls to this with direct calls to // `absl::StrFormat()` and remove. template [[nodiscard]] std::string StringPrintf(const absl::FormatSpec& format, const Args&... args) { return absl::StrFormat(format, args...); } // Returns a C++ string given `vprintf()`-like input. [[nodiscard]] PRINTF_FORMAT(1, 0) BASE_EXPORT std::string StringPrintV(const char* format, va_list ap); // Like `StringPrintf()`, but appends result to a supplied string. // TODO(crbug.com/40241565): Replace calls to this with direct calls to // `absl::StrAppendFormat()` and remove. template void StringAppendF(std::string* dst, const absl::FormatSpec& format, const Args&... args) { absl::StrAppendFormat(dst, format, args...); } // Like `StringPrintV()`, but appends result to a supplied string. PRINTF_FORMAT(2, 0) BASE_EXPORT void StringAppendV(std::string* dst, const char* format, va_list ap); } // namespace base #endif // BASE_STRINGS_STRINGPRINTF_H_