通常有人会去抓Boost的
Function Output Iterator
但我不允许在工作中使用Boost。也就是说,我只想用
copy
函数遍历集合,对每个项调用函数,获取该函数的输出,最后
push_back
放在另一个收藏中。我写了一些代码:
#include <iterator>
using std::iterator;
using std::output_iterator_tag;
template<typename Container, typename Function>
struct Back_Transform_Iterator : public iterator<output_iterator_tag,void,void,void,void>{
explicit Back_Transform_Iterator(Container &_container, const Function &_function)
: m_Container(_container),
m_Function(_function){}
Back_Transform_Iterator<Container,Function>& operator= (const typename Function::argument_type &value){
m_Container.push_back( m_Function( value ) );
return *this;
}
Back_Transform_Iterator<Container,Function>& operator* (){ return *this; }
Back_Transform_Iterator<Container,Function>& operator++ (){ return *this; }
Back_Transform_Iterator<Container,Function> operator++ (int){ return *this; }
typedef Container container_type;
private:
Container &m_Container;
Function m_Function;
};
template<typename C, typename F>
Back_Transform_Iterator<C,F> back_transform_inserter(C &_container, F &_unary_function){
return Back_Transform_Iterator<C,F>( _container, _unary_function );
}
但是…我遇到了编译问题。相当肯定这与
operator*()
打电话。我不知道如何有效地取消对容器对象的引用,使它们反对函数的效果。错误:
error C2582: 'operator =' function is unavailable in 'Back_Transform_Iterator<Container,Function>'
我正在迭代的项不是可变的。有人知道如何解决这个问题吗?