Boost logo

Boost Users :

From: John Femiani (JOHN.FEMIANI_at_[hidden])
Date: 2008-03-26 00:14:56


Scott Meyers wrote:
> Fundamentally, I'm sorting things based on their index in AllTypes.
Well,
> that's what I want to be doing. What I'm really doing is getting
> compilation
> errors referring to a missing tag in my metafunction, which is called
> IndexOf.
> The code I'm using is below. I'd appreciate it if people would take a
> look and
> help me figure out why it's not working.
>
<snip>
> // return the index of type T in sequence S
> template<typename S, typename T>
> struct IndexOf {
> enum { value = mpl::distance<typename mpl::begin<S>::type,
> typename mpl::find<S, T>::type
> >::value };
> };
>
> int main()
> {
> using mpl::_1;
> using mpl::_2;
>
> typedef mpl::vector<char, short, int, long, float, double>
AllTypes;
>
> typedef mpl::vector<long, char, short> Unsorted;
>
> typedef mpl::sort<Unsorted, // this call
to
> mpl::less<IndexOf<AllTypes,_1>, // sort
doesn't
> IndexOf<AllTypes,_2> > // compile
> >::type
> Sorted;
> }
>

Try this:

template<typename S, typename T>
struct IndexOf: mpl::distance<typename mpl::begin<S>::type,
                                 typename mpl::find<S, T>::type
>
{};

-- John Femiani


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net