3
範囲内の各数値に指定された値を掛け、必要に応じてファンクタを使用して乗算する数値への参照を取得すると想定します。入力パラメータへの参照を返すC++ファンクタ
template <typename TIter, typename TNumber, typename TTransformer = self_reference<iterator_traits<TIter>::value_type>>
void multiply_range(TIter begin, TIter end, TNumber multiplicand, TTransformer transformer = TTransformer()) {
for_each(begin, end, [multiplicand, &transformer](typename iterator_traits<TIter>::value_type val){
transformer(val) *= multiplicand;
}
}
はself_reference
は、その入力パラメータへの参照を返すファンクタつまり、やろうとしているものない標準ライブラリの何かがありますか?
(標準ライブラリはstd::less
とstd::plus
のようなものがありますが、私はもっと基本的なものを求めていないのですか?)
だから、次のコードは動作するはずです:
int x[4] = {1, 3, 5, 7};
multiply_range(x, x + 4, 2);
// x will become {2, 6, 10, 14}
vector<int> y[2] = {{1, 2}, {3, 4, 5}};
multiply_range(y, y + 2, 2, [](vector<int>& v) -> int& { return v[0]; });
// y will become {{2, 2}, {6, 4, 5}}
C++ 11 C++ 14も問題ありません。
あなたはそうです。私は質問のタイトルを変更します。 – Bernard
私は、 ''テンプレートライブラリのどの部分もそのようなファンクタの使用を必要としないことに驚いています。 –
Bernard