N 元谓词求值函数 (count_if)
我创建了一个函数,给定一个类型 T 的列表和一个谓词(指向指定函数的指针),该函数计算列表中返回 true 的元素数量。
这适用于原子谓词 (isEven,isOdd,is_less_than_42),但是如果我想将它与 N 元谓词一起使用,我该怎么办?有没有办法传递 N 元谓词所需的 N-1 个参数的可选列表?
template<typename T, class Pred>
int evaluate(listofelements<T> &sm, Pred pred){
typename listofelements<T>:: iterator begin, end;
int count=0;
begin=sm.begin();
end=sm.end();
while(begin!=end){
if(pred(*(begin->data))) count++;
begin++;
}
return count;
}
I created a function which, given a list of some type T, and a predicate (a pointer to a specified function), counts how many elements in the list return true.
This works with atomic predicates (isEven,isOdd,is_less_than_42), but what should I do if I want to use it with N-ary predicates? Is there any way to pass an optional list of N-1 arguments needed by the N-ary predicate?
template<typename T, class Pred>
int evaluate(listofelements<T> &sm, Pred pred){
typename listofelements<T>:: iterator begin, end;
int count=0;
begin=sm.begin();
end=sm.end();
while(begin!=end){
if(pred(*(begin->data))) count++;
begin++;
}
return count;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 std::bind 将 N 元函数转换为一元函数对象。
std::bind
采用 C++11,但在较旧的编译器中,可能包含 TR1,您可以在其中使用std::tr1::bind
,最后还有Boost.Bind。或者你可以自己构建函数对象:
You could use
std::bind
to convert an N-ary function to a unary function object.std::bind
is in C++11, but in older compilers it is likely that TR1 is included where you could usestd::tr1::bind
, and lastly there is still Boost.Bind.Or you could make up the function object yourself: