这是我第一次成功使用std::for_each()构造的几个片段:
struct add_to_memory {
void operator()(const boost::tuple<const string&, const string&> &t ) {
m_map.insert(make_pair(t.get<0>(),t.get<1>()));
}
add_to_memory(MemoryBank &m) : m_map(m) {};
private:
MemoryBank &m_map;
};
void
memorize(Block &block) {
block.get_record_types(record_type_set);
BOOST_FOREACH(D_RecordType_Set::value_type rec_type, record_type_set) {
MD_Zip_Range zipper = block.make_field_value_zip_range(rec_type);
std::for_each(zipper.first, zipper.second, add_to_memory(memory_bank));
}
}
现在,我想将“记忆”更改为接受附加参数的函数-函数或函子或
add_to_memory()
是什么。但是我不知道在签名中使用哪种类型。void scan_block_and_apply_function( Block&, ..?.. );
我正在使用[read:“stuck with”] g++ 4.4,因此可以肯定地说我还没有c++ 11。签名应该是什么?以及应该如何调用scan_block_and_apply_function()?
最佳答案
这通常是通过模板完成的:
template <typename MemoryBankFunctor>
void memorize(Block &block, MemoryBankFunctor functor) {
block.get_record_types(record_type_set);
BOOST_FOREACH(D_RecordType_Set::value_type rec_type, record_type_set) {
MD_Zip_Range zipper = block.make_field_value_zip_range(rec_type);
std::for_each(zipper.first, zipper.second, functor);
}
}
关于c++ - C++什么是std::for_each()函数参数类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18195201/