$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] enable_if for class members
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2009-01-30 12:37:33
AMDG
Christopher Jefferson wrote:
> In a class, I want to have one member function which has different 
> implementations depending on one of the template parameters. I tried 
> to use enable_if
>
> template<bool b>
> struct foo
> {
>   typename boost::enable_if_c<b, int>::type
>   get_val( )
>   { return 2; }
>
>   typename boost::disable_if_c<b, int>::type
>   get_val()
>   { return 3; }
> };
>
> But when I use foo in code, it doesn't work, complaning that:
>  error: no type named 'type' in 'struct boost::enable_if_c<true, int>'
enable_if doesn't work for members of a template class unless those members
are themselves templates.
> Am I not using enable_if in the correct way? Is there any easy way to 
> do waht I'm trying to do? I used to do this by declaring an inner 
> class and overloading that, but then it is necessary to pass in the 
> class and the code looks very messy.
You could use private member functions
template<bool b>
struct foo
{
public:
    int get_val() { return(get_val(boost::mpl::bool_<b>())); }
private:
    int get_val(boost::mpl::true_) { return(2); }
    int get_val(boost::mpl::false_) { return(3); }
};
In Christ,
Steven Watanabe