1

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() はどのように呼び出す必要がありますか?

4

3 に答える 3

0

あなたが渡しているのは のインスタンスですadd_to_memory。したがって、次のようなことを行う必要があります。

void memorize(Block &block, add_to_memory func)
{
    // ...
    std::for_each(zipper.first, zipper.second, func);
}
于 2013-08-12T19:33:36.657 に答える