次のコードがあります
auto adder = [](string& s1, const string& s2)->string&&
{
if (!s1.empty())
s1 += " ";
s1 += s2;
return move(s1);
};
string test;
test.reserve(wordArray.size() * 10);
string words = accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
ここで私が望むのは、文字列のコピーを避けることです。残念ながら、これはvs2012のaccumulateの実装では達成されません。内部的に蓄積すると、別の関数 _Accumulate が呼び出され、その過程で右辺値の機能が失われます。
代わりに _Accumulate 関数を呼び出します
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
意図したパフォーマンスの向上が得られます。
右辺値引数を考慮に入れるために std ライブラリを書き直す必要がありますか?
あまりにも不正行為をせずに私が望むものを達成するために蓄積を使用できる他の方法はありますか?