$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: chun ping wang (cablepuff_at_[hidden])
Date: 2007-11-04 02:08:50
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_at_[hidden]> 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.
>