这是我第一次成功使用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/

10-11 16:04