
Never mind i found the problem. First i need to do typedef long double longdouble so it will treat it as two parameters, not three Second i was passing a const vector of unordered_map. On Nov 3, 2007 11:38 PM, chun ping wang <cablepuff@gmail.com> wrote:
Hi I have a problem with boost::function in association with template.
I have a gain function declaration declare as this.. template < template <typename ELEM,typename = std::allocator<ELEM> > class CONT, typename T, typename U > long double gain(const CONT<boost::unordered_map<T, U> >& data, const T& attr, const T& target_attr); // old signature does compile template < template <typename ELEM,typename = std::allocator<ELEM> > class CONT, typename T, typename U > boost::any ID3( const CONT<boost::unordered_map<T, U> >&, const T&, const CONT<T> &, boost::function<long double (const CONT<boost::unordered_map<T, U> >&, const T&, const T&) > );
// new signature DOES NOT compile. template < template <typename ELEM,typename = std::allocator<ELEM> > class CONT, typename T, typename U > boost::any ID3( const CONT<boost::unordered_map<T, U> >&, const T&, CONT<T> *, boost::function<long double (const CONT<boost::unordered_map<T, U> >&, const T&, const T&) > );
In the main file i have things pass as this. // old way of passing works with old signature boost::any tree( MyAnn::ID3<std::vector, std::string, std::string>(data, target_attr, attribute, MyAnn::gain<std::vector, std::string, std::string>) ); // line 76 to 82. boost::function<long double (const std::vector<boost::unordered_map<std::string, std::string>&, const std::string&, const std::string&)> gainfunc; gainfunc = MyAnn::gain<std::vector, std::string, std::string>; boost::any tree( MyAnn::ID3<std::vector, std::string, std::string>(data, target_attr, boost::addressof(attribute), gainfunc) );
I compile the file and get teh following errors. Can anyone tell me why changing the orginial signature from const CONT<T>& to CONT<T> * all of sudden breaks the code. Thanks.