|
Boost Users : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-03-29 14:48:19
Chris Weed wrote:
> On 3/28/07, Tobias Schwinger <tschwinger_at_[hidden]> wrote:
>> Christian Henning wrote:
>>> Hi there, I'm trying to find a solution for looking for type vector
>>> containing a specific type. On another thread I was suggested to use
>>> at_c within the find_if algorithm. Unfortunately the code doesn't
>>> compile.
>> Placeholder substitution won't work in templates taking non-type
>> arguments, such as at_c.
>>
>>> typedef mpl::find_if<mat, is_same<mpl::at_c<mpl::_1,1>, int> >::type iter;
>> Try using 'at' and 'int_':
>>
>> typedef find_if<mat, is_same<at<_1,int_<1> >, int> >::type iter;
>>
>> Regards,
>> Tobias
>>
>
> I am curious why at_c doesn't do the same thing. Shouldn't these be equivalent.
Yes, ideally. But it would be rather heavy, implementation-wise.
You can decompose a type created by specializing a template like this:
template<typename T> struct template_traits;
template<template <typename> class Tpl, typename T0>
struct template_traits< Tpl<T0> >
{
static const int arity = 1;
typedef T0 first_type;
};
template<template<typename,typename> class Tpl, typename T0,
typename T1>
struct template_traits< Tpl<T0,T1> >
{
static const int arity = 2;
typedef T0 first_type;
typedef T1 second_type;
};
//...
That's roughly what the MPL lambda facility does.
Now imagine you want to support int typed (non-type) template
parameters. Right, we'd need all combinations - N^2 specializations -
only for ints.
Also note that several compilers won't handle the code above, so MPL
needs to emulate it.
Regards,
Tobias
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