C++での可変長引数を取る関数の書き方
std::string localizedFormat(const std::string& format, const std::vector<std::string>& strVector)
{
std::string ret = format;
int i = 0;
for (const std::string& str : strVector) {
ret = strReplace(ret, "%" + std::to_string(i) + "@", str);
i++;
}
return ret;
}
上記のような関数を作りました。
これは、format中の%0@、%1@...という文字列を、vectorに入っている文字列で置き換えていく関数です。
(strReplace(str,from,to)という関数は、str中のfrom文字列をto文字列に置き換える関数です。)
使用例
std::vector<std::string> vect = {"A","10","B"};
std::string format1 = "%0@ dealt %1@ damage to %2@.";
CCLOG("%s", localizedFormat(format1, vect).c_str());
//"A dealt 10 damage to B."
std::string format2 = "%0@は%2@に%1@のダメージを与えた。";
CCLOG("%s", localizedFormat(format2, vect).c_str());
//AはBに10のダメージを与えた。
これはゲームのメッセージをローカライズするために作った関数で、format中の置換する位置が前後することがあるので、数字で置換する位置を指定しています。
これを
std::string localizedFormat(const std::string& format, const std::string& str,...)
という可変長引数を取る関数にしたいのですが、どう書けばいいでしょうか。
できれば、Cのva_listとかを使うやり方でなく、C++の可変長テンプレートを使ったやりかたがいいです。
よろしくお願いします。