for_each()
을 사용하여 일부를 컨테이너의 일부로 Function
(으)로 전화 할 수 있습니까?for_each에서 함수와 술어를 결합하는 방법은 무엇입니까?
나는
for(i in shapes)
if(i.color == 1)
displayShape(i);
을 할 수있는 for_each_if()
을 만들었으며
for_each_if(shapes.begin(), shapes.end(),
bind2nd(ptr_fun(colorEquals), 0),
ptr_fun(displayShape));
bool colorEquals(Shape& s, int color) {
return s.color == color;
}
그러나, 내가 STL과 같은 알고리즘을 immitating 것은 내가 일을해야 일이 아니다 느낌처럼 통화가 보인다.
이렇게하려면 기존 STL 키워드 만 사용하는 방법이 있습니까?
내가
은 *가 더 복잡한 경우, 펑의 이름은 무엇 펑터에 대한 오해의 소지가 될 것 때문에 하지이
for_each(shapes.begin(), shapes.end(), bind2nd(ptr_fun(display_shape_if_color_equals), 0));
을하고 싶지 않았다 거기 (
colorEquals
과 같은) 구조체의 멤버에 액세스하는 방법은for_each
과 같은 함수를 만들 필요없이? *
차가움. 이제는 for_each()를 호출 할 때 템플릿 매개 변수를 줄일 수 있도록'if_fun' 객체를 인스턴스화하는 도우미 함수를 추가 할 수 있다고 가정합니다 ... –
boost :: bind는 일반 함수와 마찬가지로 잘 작동하므로 클래스 기반 Functors는 실제로 필요하지 않습니다 – bradgonesurfing
이 솔루션은 직관적 인 혼란의 지옥입니다. 부스트 어댑터와 범위가 여기에서 사용하고자하는 것입니다. – newhouse