I use the header file <boost/bind.hpp> instead of <boost/lambda/bind.hpp> by mistake. Thanks for your help.
On Mon, 9 Dec 2002 13:16:38 -0500 (EST) Jaakko Jarvi <[EMAIL PROTECTED]> wrote: > The algorithm.hpp header is badly broken in 1.29 (wrong file > in the wrong place at the wrong time). This is fixed in the cvs main > trunk. > > The following program compiles and runs fine (with gcc3.2). > > Cheers, Jaakko > > > // ------------------ > #include <boost/lambda/lambda.hpp> > #include <boost/lambda/bind.hpp> > #include <boost/lambda/algorithm.hpp> > > #include <vector> > #include <iostream> > > using namespace boost::lambda; > > int main() { > > std::vector<int> b1; > b1.push_back(1); b1.push_back(2); > > std::vector<int> b2; > b2.push_back(3); b2.push_back(4); b2.push_back(5); > > std::vector<std::vector<int> > a; > a.push_back(b1); > a.push_back(b2); > > int sum = 0; > std::for_each(a.begin(), a.end(), > bind(ll::for_each(), > bind(call_begin(), _1), bind(call_end(), _1), > protect(sum += _1))); > > std::cout << "sum = " << sum << "\n"; > } > // ------------------ > > > > > On Tue, 10 Dec 2002, Robin.Hu wrote: > > > 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? > > > > > > -- > -- > -- Jaakko Järvi email: [EMAIL PROTECTED] > -- Post Doctoral Fellow phone: +1 (812) 855-3608 > -- Pervasive Technology Labs fax: +1 (812) 855-4829 > -- Indiana University, Bloomington > > > _______________________________________________ > Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost -- <[EMAIL PROTECTED]> _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost