2011-05-07 4 views
1

나는 boost :: lambda를 사용하는 방법을 배우고있다. 내가 가진 한 가지 질문은 멤버 함수 호출에 관한 것입니다. 테스트 일 뿐이므로 boost :: lambda를 사용하여이 작업을 수행하고 싶습니다. 분명히 한 컨테이너에서 다른 컨테이너로 요소를 복사하는 방법은 50 만 가지가 있기 때문입니다.boost :: lambda를 사용하여 컨테이너 복사하기

I 3 개 요소가있는 list<int> 있습니다

std::list<int> a; 
a.push_back(2); 
a.push_back(3); 
a.push_back(4); 

을 그리고 vector<int> :에 다시의 각 요소에 대해, 밀어 :

vector<int> b; 

내가이 다음을 수행하려고 해요 비. 여기 내 샷이다 :

std::for_each(a.begin(), a.end(), (b ->* (&std::vector<int>::push_back))(_1)); 

문제는이 멤버 함수 호출, 이야기를 수락하지 점이다 : 나는 다른 방법을 시도하지만,이 중 하나가 작동하지 않았다

no match for ‘operator->*’ in ‘b ->* &std::vector<int, std::allocator<int> >::push_back’

.

미리 감사드립니다.

답변

1

너는 이와 비슷한 것을 시도 했습니까?

for_each(a.begin(), a.end(), bind(&std::vector<int>::push_back, &b, _1)); 
+0

bind를 사용하려했지만 잘못되었습니다. 감사! – Gabriel

1

Boost.Phoenix는 C++의 람다 (lambda) 기능을보다 잘 구현하고 이미 std 컨테이너 메소드의 게으른 버전을 사용하는 것이 좋습니다.

http://www.boost.org/doc/libs/1_46_1/libs/spirit/phoenix/doc/html/index.html

피닉스는 현재 성령 안에 숨겨져 있지만 곧 때문입니다 1.47에서 최고 수준 향상 시민이 될 예정이다.

+0

음, 매우 흥미 롭습니다. 조언 해 주셔서 감사드립니다. 윌 부스트 부스트 :: 람다 부스트 것인가? – Gabriel

+0

아직 Phoenix 3에 람다의 코너 케이스가 포함되어있는 경우 천천히 사용 중지 할 계획입니다. –

관련 문제