以下是我第一次成功使用 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&, ..?.. );
我正在使用 [阅读:“坚持”] 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++ std::for_each() 函数参数类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18195201/