
Hi, I'm having trouble getting make_filter_iterator and bind to work together nicely: ------------------------------------------------------------------------------- boost::function<bool (const node_type&)> is_constraint; is_constraint = boost::bind(&node_type::IsConstraint, _1); boost::make_filter_iterator(is_constraint, ab.begin(), ab.end()); // ERROR: does not compile boost::make_filter_iterator(boost::bind(&node_type::IsConstraint, _1), ab.begin(), ab.end()); // compiles ------------------------------------------------------------------------------- Note that ab.begin()/ab.end() return iterators to containers of shared pointers. See below for compiler errors. What I would like to do, in the end, is something like this: ------------------------------------------------------------------------------- typedef boost::filter_iterator<boost::function<bool (const node_type&)>, articulated_model_type::node_df_traversal_iterator> joint_iterator; joint_iterator first = boost::make_filter_iterator(boost::bind(&node_type::IsConstraint, _1), ab.begin(), ab.end()); ------------------------------------------------------------------------------- Unfortunately, this doesn't compile either. I want an explicit handle to the interator (first), because I'd like to do a normal for loop like this: for(joint_iterator joint = first; joint != last; ++joint) { ... } Again, compile errors are below. Thanks for the help. --nico d:\dev\boost_1_33_1\boost\iterator\filter_iterator.hpp(100) : error C2664: 'boost::function1<R,T0,Allocator>::result_type boost::function1<R,T0,Allocator>::operator ()(T0) const' : cannot convert parameter 1 from 'Hybrid::Graph<node_traits>::const_node_ptr' to 'const Hybrid::Node<graph_type_,node_traits> ' with [ R=bool, T0=const Hybrid::Node<Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::graph_type,ArticulatedModelNodeTraits<MyTypes>> , Allocator=std::allocator<void> ] and [ node_traits=ArticulatedModelNodeTraits<MyTypes> ] and [ graph_type_=Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::graph_type, node_traits=ArticulatedModelNodeTraits<MyTypes> ] Reason: cannot convert from 'Hybrid::Graph<node_traits>::const_node_ptr' to 'const node_type' with [ node_traits=ArticulatedModelNodeTraits<MyTypes> ] No constructor could take the source type, or constructor overload resolution was ambiguous d:\dev\boost_1_33_1\boost\iterator\filter_iterator.hpp(99) : while compiling class-template member function 'void boost::filter_iterator<Predicate,Iterator>::satisfy_predicate(void)' with [ Predicate=boost::function<bool (const node_type &)>, Iterator=Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::node_df_traversal_iterator ] d:\dev\Hybrid\Tests\Graph\main.cpp(645) : see reference to class template instantiation 'boost::filter_iterator<Predicate,Iterator>' being compiled with [ Predicate=boost::function<bool (const node_type &)>, Iterator=Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::node_df_traversal_iterator ] ====================================================================================== :\dev\Hybrid\Tests\Graph\main.cpp(646) : error C2440: 'initializing' : cannot convert from 'boost::filter_iterator<Predicate,Iterator>' to 'boost::filter_iterator<Predicate,Iterator>' with [ Predicate=boost::_bi::bind_t<bool,boost::_mfi::cmf0<bool,ConstraintNodeTraits>,boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>, Iterator=Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::node_df_traversal_iterator ] and [ Predicate=boost::function<bool (const node_type &)>, Iterator=Hybrid::Graph<ArticulatedModelNodeTraits<MyTypes>>::node_df_traversal_iterator ] No constructor could take the source type, or constructor overload resolution was ambiguous -- nico galoppo von borries @ address: 105 creel st., chapel hill comp. graphics phd. student @ north carolina, 27516 USA UNC, chapel hill @ phone: +1 (919) 962-1898 (office) @ +1 (919) 942-7609 (home) @ email: nico at cs dot unc dot edu @ homepage: http://www.cs.unc.edu/~nico --- debian linux :: vim powered