Boost logo

Boost :

Subject: Re: [boost] [TypeErasure]
From: Larry Evans (cppljevans_at_[hidden])
Date: 2012-07-24 09:34:51


On 07/23/12 14:42, Lorenzo Caminiti wrote:
> On Mon, Jul 23, 2012 at 3:30 PM, Steven Watanabe <watanabesj_at_[hidden]> wrote:
>> On 07/23/2012 11:17 AM, Markus Werle wrote:
>>> Steven Watanabe wrote:
>>>> On 07/22/2012 07:21 AM, Markus Werle wrote:
>>>>>
>>>>> I have one question: proto and spirit use _1, _2, etc.
>>>>> TypeErasure uses _a, _b, _c ...
>>>>> What was your reason to introduce yet another placeholder set?
[snip]
>> It isn't exactly identical. The names _1, _2
>> carry extra meaning about how they are substituted
>> which doesn't make sense for my library.
>>
>>>> I eventually decided that since the placeholders represented named
>>>> parameters instead of positional parameters, letters were more
>>>> appropriate than numbers.
>
> I've asked the same question "why _a, _b, etc instead of _1, _2, etc"
> a while back. Steven replied, it's because _a, _b, etc are
> placeholders for named parameters and not for positional parameters

Hmm... seems like they're names for types, not parameters.
I'm thinking they're somewhat like:

  template<typename _a, typename _b, ...>
  struct te
  {
      te(_a a_val, _b b_val, ... )
      : my_a(a_val), my_b(b_val)
      {}
      _a my_a;
      _b my_b;
      ...
      //operations
  };

I haven't thought it through that well, but the above
analogy may be some help in justifying the use of
names instead of types. In addition, just as shown in
the construction_map_tuple.cpp code attached to:

http://article.gmane.org/gmane.comp.lib.boost.devel/232953

the order is only implied if you use tuple. If you use
any to create the parameter, there's no order imposed.
For example, the following snippet of code from
the .cpp file:

  //Something similar using bindings and just any's.
    te::static_binding<bindings_map_t>
bindings_made=te::make_binding<bindings_map_t>();
    te::any<requirements, _a>
bnd_value_ptr_v(stk_value_ptr_v,bindings_made);
    te::any<requirements, _b>
bnd_displacement_v(stk_displacement_v,bindings_made);
    te::any<requirements, _a> bnd_displaced_value_ptr_v(bnd_value_ptr_v
+ bnd_displacement_v);

Shows an a_ created, then a _b createe, then another _a created.

[snip]


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