Boost logo

Boost Users :

Subject: Re: [Boost-users] boost parameter - overloading on keyword "signature"
From: David Abrahams (dave_at_[hidden])
Date: 2008-09-08 23:30:30


on Mon Sep 08 2008, e r <erwann.rogard-AT-gmail.com> wrote:

> hello,
>
> i have something like this:
>
> *hpp :
>
> namespace tag{
> template<typename Id>
> struct sequence{
> static ::boost::parameter::keyword<
> a_<Id> >& a;
> static ::boost::parameter::keyword<
> b_<Id> >& b;
>
> static ::boost::parameter::keyword<
> arg_method_<Id> >& arg_method;
> };
> }
>
> namespace sequence_arg{
> struct method{};
> struct a:public method{};
> struct b:public method{};
> }
>
> class sequence{
> public:
> template<typename Id,typename ArgPack>
> sequence(const Id& id,const ArgPack&args){
> fill_elements(id,args,args[tag::sequence<Id>::arg_method]);
> }
>
> private:
> template<typename Id,typename ArgPack>
> void fill_elements(
> const Id& id,
> const ArgPack& args,
> sequence_arg::a method
> );
> template<typename Id,typename ArgPack>
> void fill_elements(
> const Id& id,
> const ArgPack& args,
> sequence_arg::b method
> );
> };
>
> *.cpp :
>
> sequence seq(
> id(),
> (
> tag::sequence::a = a_value,
> tag::sequence::arg_method = sequence_arg::a()
> )
> );
>
> So far so good except there is redundancy of information about which
> method to use, so I'm looking for a way to be able to call say
>
> sequence seq(
> id(),
> (
> tag::sequence::a = a_value
> )
> )
>
> Any suggestion?

Use the macros -- they automatically generate the SFINAE you need so
that the right overload will be chosen -- and add type requirements.
See
http://www.boost.org/doc/libs/1_36_0/libs/parameter/doc/html/index.html#signature-matching-and-overloading
and
http://www.boost.org/doc/libs/1_36_0/libs/parameter/doc/html/index.html#adding-type-requirements.

  BOOST_PARAMETER_FUNCTION(
     (void), fill_elements, (tag),
     (required (id,*) (method, a))
     (optional ... ))
     {
        ...
     }

  BOOST_PARAMETER_FUNCTION(
     (void), fill_elements, (tag),
     (required (id,*) (method, b))
     (optional ... ))
     {
        ...
     }

HTH,

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

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