|
Boost : |
From: Robin.Hu (huxw_at_[hidden])
Date: 2002-12-09 12:55:14
Hi Boosters:
In the document of boost::lambda (ar01s05.html#sect:nested_stl_algorithms),
it says:
------------------>cited begin<-------------------
Some aid for common special cases can be provided though. The BLL defines two
helper function object classes, call_begin and call_end, which wrap a
call to the begin and, respectively, end functions of a container,
and return the const_iterator type of the container. With these
helper templates, the above code becomes:
std::for_each(a.begin(), a.end(),
bind(ll::for_each(),
bind(call_begin(), _1), bind(call_end(), _1),
protect(sum += _1)));
------------------->cited end<---------------------
But I failed to compile this example with gcc 3.2 and vc 2003 beta.
I think the problem is, both struct call_begin and struct call_end dont
provide a result_type.
[lambda/algorithm.hpp]
------------------->cited begin<-------------------
#define CALL_MEMBER(X) \
struct call_##X { \
template <class Args> \
struct sig { \
typedef typename boost::remove_const< \
typename boost::tuples::element<1, Args>::type \
>::type::const_iterator type; \
}; \
\
template<class T> \
typename T::const_iterator \
operator()(const T& t) const \
{ \
return t.X(); \
} \
};
------------------->cited end<---------------------
Is there anything I missed? And is there a possibel way to make these
call_xxx run?
-- <huxw_at_[hidden]>
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk