std::vector<T>
이 클래스의 일부이며 내 코드의 여러 다른 위치에서 반복해야하기 때문에 내가 될 것이라고 생각했습니다. 똑똑하고 IterateAttributes 함수를 만들고 루프에 넣고 단일 요소를 전달할 수있는 boost :: function 객체를 전달한 다음 요소에 대한 작업을 수행하는 함수를 전달할 수 있습니다.멤버를 반복하고 함수를 호출하여 함수를 호출 할 때 함수를 호출합니다.
구현하기 전까지는 좋은 생각 인 것 같습니다. 그런 다음 전달 된 함수에서 무엇이 반환되고 다른 인수가 필요한지 문제가 발생합니다. 템플릿을 사용하는 것과 같이 좀 더 일반적으로이를 수행하는 방법을 찾아야하거나 다른 args를 사용하는 함수 객체로 오버로드를 만들어야하는 것처럼 보입니다.
첫 번째 (더 일반적인) 옵션이 아마도 더 좋을 것이라고 생각하지만, 어떻게 생각 하나?
다음은 작동하지 않는 시험입니다. 그러나 많은 수의 args를 갖고 싶지만 Attribute (구조체) arg를 제외한 모든 arg는 필수입니다. 어떻게해야합니까?
template <typename T> template <typename arg>
void ElementNode::IterateAttributes(boost::function<T (arg, Attribute)> func_)
{
std::vector<Attribute>::iterator it = v_attributes.begin();
for (; it != v_attributes.end(); it++)
{
func_(arg, *it);
}
}
당신은'boost :: bind'를 사용하여 다른 인자들을 먼저 바인딩 한 다음'for_each'를 사용할 수 있습니다. (실제로 다른 함수를 쓸 필요가 있습니까?). 반환 값을 처리하는 것은 더 많은 생각이 필요합니다 .. – lijie
@lijie : for_each는 반복되는 요소를 수정할 수 없다고 생각했습니다. –
어 ... 나는 당신이 _collection_을 수정하지 말아야한다고 생각하지만, 요소 자체를 수정하는 것이 금지되어 있다고 생각하지 않습니다. (특히 vector와 같은 요소에 대해서는 요소의 순서가 중요하지 않습니다.) – lijie