2013-08-12 1 views
1

가 구축)합니다 (표준 : : for_each를 내 최초의 성공적인 사용에서 조각의 커플 :C++ 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)); 
    } 
} 

을 지금 추가 매개 변수를 받아들이는 함수로 변경 "기억"할 - 기능 또는 functor 또는 뭐든간에 add_to_memory()입니다. 그러나 나는 서명에서 어떤 유형을 사용할 지 알 수 없다. 내가 사용

void scan_block_and_apply_function(Block&, ..?..); 

이 : 그것은 내가 C++ 11 없어 말을하는 것이 안전합니다, 그래서 g ++ 4.4 읽기는은 "붙어"]. 서명은 무엇이되어야합니까? 그리고 scan_block_and_apply_function()을 어떻게 호출해야합니까?

답변

0

전달하는 것은 add_to_memory의 인스턴스입니다. 그래서 이런 일을해야한다 : 이것은 당신이 어떤 종류를 사용하실 수 있습니다

 


    template <typename T> 
    void scan_block_and_apply_function(Block&, const T&); 

 

:

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); 
    } 
} 
2

이것은 일반적으로 템플릿을 통해 이루어집니다 함수 또는 함수의

+1

'F (memory_bank)'? '펑터 '라는 뜻인가요? – Chap

+0

@Chap : Correct ... 입력하기 전에 깜빡했다. :) –

+0

나는 이것을 원래 요청 했어야했는데, memorize()를 호출하는 방법을 보여줄 수 있습니까? – Chap

0

당신은 템플릿 매개 변수를 사용한다 :

void memorize(Block &block, add_to_memory func) 
{ 
    // ... 
    std::for_each(zipper.first, zipper.second, func); 
}