Jaakko Jarvi wrote:

> Dear Boosters,
> 
> The enable_if library defines the enable_if and disable_if templates,
> which are tools for controlling which function templates are included
> in the overload resolution set based on the properties of the argument
> types.
> 
> The following example demonstrates their use:
> 
> template <class T>
> typename enable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) {
>   std::cout << "An arithmetic type\n";
> }
> 
> template <class T>
> typename disable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) {
>   std::cout << "Not an arithmetic type\n";
> }

Wow! C++ always has a solution for its own problems:
I always wondered how I could prevent Daixtrose template operators 
get applied to other user's or builtin types and decided to put 

template <class T1, class T2> 
SomeComplicatedType operator+(T1 const &, T2 const &)

et. al. into their own namespace DefaultOps.

As of today Daixtrose users are explicitly forced to say
using namespace Daixt::DefaultOps if they want their code to compile.
And still may run into disambiguities when they include other beasts
of that kind. This is annoying.

With enable_if this can be reduced to say it once and for all times:
Users just have to specialize a traits class

template <class T> struct DaixtroseTraits
{
  enum { use_default_ops = false };
};

and I change my operators to

template <class T1, class T2> 
enable_if
<
 (
  (DaixtroseTraits<T1>::use_default_ops == true)
  &&
  (DaixtroseTraits<T2>::use_default_ops == true)
  ),
  SomeComplicatedType 
>::type
operator+(T1 const &, T2 const &);

and move them from namespace Daixtrose::Defaultops to namespace Daixtrose.
What do You think? Did I miss any side effects?

Thank You, Jaakko!


Markus


-- 

Build your own Expression Template Library with Daixtrose!
Visit http://daixtrose.sourceforge.net/ (the sandbox for boost::etl?)



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to