2011-12-20 4 views
0

DD이 유형이 vector<Dog>이고 이 이라고 가정 해 보겠습니다. 템플릿을 사용하여 모든 멤버 함수를 벡터에서 자동으로 호출 할 수 있습니까? 나는. DogBark() 기능이있는 경우 D.bark()으로 모든 개가 껍질을 벗기를 원합니다.템플릿을 사용하여 객체 벡터에 클래스 함수 적용

이제 명확하게 새로운 기능과 간단한 루프를 사용하여이 동작을 직접 코딩 할 수 있었지만 템플릿을 쉽게 만들 수 있습니까? 나는. 그래서 R.smash()은 나없이 모든 바위를 부술 것입니다. 이 루프를 명시 적으로 코딩하고 있습니다. 문법이 무엇인지 상상해보고 싶습니다. 그리고 그것은 내 마음을 불고 있습니다.

+0

루프 자체를 코딩해야하므로 일종의 루프가없는 벡터의 각 개체에 대해 작업을 수행 할 방법이 없습니다. – Chad

+0

얼마나 슬픈가! 나는 기능적 템플리 팅 (function templating)의 일부 방법이 있었으면 좋겠다. 인수로 전달 된 다음 템플릿 함수에서 루프로 자동 호출 될 수 있습니다. – andyInCambridge

답변

4
std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1)); 

boost::bind 대신 C++ 03에서 사용할 수 있습니다. 별도의 함수 템플릿으로 래핑을 시도 할 수는 있지만 많이 구입하지 않을 것이라고 생각합니다. 이 동작이 필요한 곳에 for_each을 사용하면 충분합니다. 이 같은

+0

감사합니다. 바인드 명령은 여기의 키와 같습니다. 나는 그것에 대해 읽을 것이다. – andyInCambridge

+0

이것이 최선의 방법이지만 여전히 "루프 코딩"입니다. – Chad

2

뭔가 작동합니다 :

std::for_each(dog_vec.begin(),dog_vec.end(),std::mem_fun_ref(&dog::bark)); 

나는 쉬운 방법이 있다고 생각.

+1

C++ 11에서는'mem_fun_ref'가 사용되지 않습니다. –

관련 문제