我的error: invalid use of void expression
方法中出现draw_all_seq_inside2
错误!
template <typename Container>
void draw_all_seq_inside(Container &c, const rectangle &w){
typename Container::iterator iter;
for(iter = c.begin() ; iter != c.end() ; iter++){
(*iter)->inside_window(w._btm_left, w._top_right);
}
}
template <typename Container>
void draw_all_seq_inside2(Container &c, const rectangle &w){
for_each(c.begin(),c.end(),draw_all_seq_inside(c, w));
}
我正在调用draw_all_seq_inside
中的for_each algorthim
,我这样做是否正确?
答案 0 :(得分:4)
for_each(c.begin(),c.end(),draw_all_seq_inside(c, w));
第三个参数应该是一个可调用的实体。也就是说,它可以是一个函数对象或函数指针,它可以接受容器c
元素类型的一个参数。
但是在你的代码中,你正在调用函数并将返回的值(void
)作为第三个参数传递给std::for_each
。这是错误的原因。
答案 1 :(得分:0)
你做不到。
for_each
的第三个参数是一个带有单个参数的函数对象。然后for_each
将迭代第一个和第二个参数指定的序列,并将每个元素的值传递给该函数对象。
for_each
在使用比编写for
循环更简洁时更有用。这看起来不像是这样,但如果真的想要使用for_each
,那么你只有一个选项。
写一堂课:
template <typename Container>
void draw_all_seq_inside2(Container &c, const rectangle &w) {
class Func
{
const rectangle & _w;
public:
Func(const rectangle &w) : _w(w) {}
void operator()(/* type here */ * val)
{
val->inside_window(_w._btm_left, _w._top_right);
}
};
for_each(c.begin(),c.end(), Func(w));
}
此代码似乎仅适用于符合C ++ 11的编译器。如果使用C ++ 03实现,请将类定义移到draw_all_seq_inside2
之外。