Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost parameter] misusing deduced - thanks, but sill unsure about the next step
From: er (erwann.rogard_at_[hidden])
Date: 2009-02-24 23:29:08


David Abrahams wrote:
> on Sun Feb 22 2009, er <erwann.rogard-AT-gmail.com> wrote:
>
>> I've realized I wasn't using deduced properly. Something like this?
>>
>> typedef parameter::parameters<
>> parameter::required<
>> parameter::deduced<tag_type>,
>> is_same<mpl::_1,self_type>
>> >
>> > params;
>>
>> Should allow and ArgPack of the form ((tag = x)) or ((x)), provided x is of type
>> self_type, right?
>
> Yes, that looks right to me.
>

Thank you for your answer, but I would still need a bit of help:

I'm trying to fetch an argument only by its type, not its name or position.

For example, I can't replace ((x)) above by say ((x,y)) where only x has
the desired type, because apparently, this is not a proper way to form
an ArgPack.

I've tried to simplify my intent in the code below.

*.hpp
struct no_name_{};
namespace tag{
     ::boost::parameter::keyword<no_name_>&
             no_name =
             ::boost::parameter::keyword<no_name_>::get();
}//tag
struct A{
        typedef parameter::parameters<
                parameter::required<
             parameter::deduced<no_name_>,
             is_same<mpl::_1,A>
>
> params;

        explicit A(double x):x_(x){}

        template<typename Args>
        A(const Args& args):x_(0){
                const A& a = (params()(args))[tag::no_name];
                x_ = a.x_;
        };
        double x_;
};

*.cpp
     A a0(0.9);
     A a1((a0,0.5));// left-hand operand of comma has no effect
     std::cout << "a1.x_=" << a1.x_ << std::endl; // I want 0.9 here


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