概要
Goのfmt.Sprintf
関数のようなフォーマット文字列を生成する関数をC++で使用したかったが,std::string
型でフォーマット文字列を生成する関数がC++17まではなさそうだったので自作した.
なお,Boostライブラリを使用できる環境か,あるいはC++20以降なら以下の関数は不要である.それぞれ,boost::format()
関数,std::format
関数を使用できる.
ソースコード
main.cpp
#include <cstdarg>
#include <iostream>
#include <string>
/**
* @brief 1023文字(+ヌル文字)までの文字列をフォーマットして返す
*/
std::string StrFormat(const char* format, ...) {
va_list args;
va_start(args, format);
char buffer[1024];
vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
return std::string(buffer);
}
int main(int argc, char const* argv[]) {
std::cout << StrFormat("Hello %s", "World") << std::endl;
return 0;
}