returns 对其输入参数的引用的 C++ 仿函数
C++ functor that returns a reference to its input parameter
考虑这个函数,它应该将一个范围内的每个数字乘以一个提供的值,并且可以选择接受一个仿函数来获取对要相乘的数字的引用:
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
正在尝试做的事情,即 returns 对其输入参数的引用的函子?
(标准库有 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 也很好。
a functor that returns a reference to its input parameter
与
完全不同
C++ Functor that Returns Itself
您正在寻找的是最常见的 "identity" 转换(呃,或仿函数),它不是 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
正在尝试做的事情,即 returns 对其输入参数的引用的函子?
(标准库有 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 也很好。
a functor that returns a reference to its input parameter
与
完全不同C++ Functor that Returns Itself
您正在寻找的是最常见的 "identity" 转换(呃,或仿函数),它不是 C++ 标准库的一部分。