C# から WriteLine にほぼ似た関数を作成できます。
void WriteLine(string const &outstr, ...) {
va_list placeholder;
va_start(placeholder, outstr);
bool found = false;
for (string::const_iterator it = outstr.begin(); it != outstr.end(); ++it) {
switch(*it) {
case '{':
found = true;
continue;
case '}':
found = false;
continue;
default:
if (found) printf("%s", va_arg(placeholder, char *));
else putchar(*it);
}
}
putchar('\n');
va_end(placeholder);
}
同様の議論でそれを呼び出します:
WriteLine("My fav place in the world is {0}, and it has a lot of {1} in it", "Russia", "Mountains");
出力:
My fav place in the world is Russia, and it has a lot of Mountains in it
もちろん、この関数は完全ではありません。なぜなら、C# の System.Console.WriteLine() 関数は順序どおりに引数を持たず、正しい文字列を完全な文字列の正しい場所に配置できるからです。これは、最初にすべての引数を配列に配置し、配列のインデックスにアクセスすることで解決できます