Boost logo

Boost :

From: Jonathan Turkanis (technews_at_[hidden])
Date: 2004-10-27 14:05:20


"Daniel Wallin" <dalwan01_at_[hidden]> wrote in message:

> I don't know if it's better, but you can get rid of the SFINAE by doing
> something like:
>
> struct _ {};
>
> template<class T, int N = 3>
> struct rebind : rebind<T, N - 1>
> {};
>
> template<class T>
> struct rebind<T, 0>
> {
> typedef T type;
> };
>
> template<template<class> class T, class P1>
> struct rebind<T<P1>, 1>
> {
> typedef T<_> type;
> };
>
> template<template<class, class> class T, class P1, class P2>
> struct rebind<T<P1, P2>, 2>
> {
> typedef T<_, _> type;
> };
>
> template<
> template<class, class, class> class T
> , class P1, class P2, class P3
> >
> struct rebind<T<P1, P2, P3>, 3>
> {
> typedef T<_, _, _> type;
> };
>
> Or you could just use template_arity to pass the arity to the
> specialized template, instead of recursively trying every arity. I
> suspect template_arity has to do something equivalent to this though, so
> maybe this saves a few instantiations.

Thanks for the suggestions. I was hoping there might be something radically
simpler. I think I"m happy to stick with enable_if and template arity (on
platforms which require it), since it states the intent very clearly. It can
also be encapsulated better than the example I posted, e.g., enable_by_arity<
T<P>, 1 > ... .

>
> HTH,
> --
> Daniel Wallin
>

Jonathan


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk