2010-06-16 2 views
3
template <typename T> 
struct Foo 
{ 
    void operator()(T& t) { t(); } 
}; 

유사한 구현을 가진 스탠드 아트 또는 부스트 펑터가 있습니까? 그것을 할 수있는 다른 방법이있다operator()를 호출하는 stl/boost 펑터

std::for_each(beginIter, endIter, Foo<Bar>()); 

아니면 :

가 나는 펑터의 컨테이너를 반복해야합니까? 특히,

std::for_each(v.begin(), v.end(), std::mem_fun_ref(&Bar::operator())); 
+0

나는 당신이 무엇을 요구하고 있는지 잘 모른다. 있는 그대로 코드에 어떤 문제가 있습니까? 뭐하는거야? –

+0

나는 boost :: function 객체의 컨테이너를 가지고있다. std :: for_each를 통해 iterate하고 모든 boost :: function 요소에 대해 operator()를 호출하고 싶습니다. 나는 Foo와 같은 functor가 stl/boost로 이미 구현되었는지 여부를 알 수 있습니다. 물론 그것을 쓰는 것은 큰 문제가 아닙니다. 이미 구현 될 수 있다고 생각했습니다. – Voivoid

답변

4

바인더는 bind()는 펑터를 생성하는 것이 사소한하기 C++ 0x의 자동 지원이있는 경우 :

BOOST_FOREACH(auto f, v) {f();} 
1

그것은 BOOST_FOREACH로 약간 덜 장황 수 있습니다 :

std::for_each(begin, end, boost::bind(&Bar::operator(), _1)); 

또는 mem_fun_ref를 사용하여 : 부스트 또는 C++ 0X 같은

0

적어도 나는 그것을 발견했다. boost :: apply는 모든 일을해야한다.

std::for_each(beginIter, endIter, boost::bind(boost::apply<void>(), _1)); 
관련 문제