
On Jul 24, 2012 9:35 AM, "Larry Evans" <cppljevans@suddenlink.net> wrote:
On 07/23/12 14:42, Lorenzo Caminiti wrote:
On Mon, Jul 23, 2012 at 3:30 PM, Steven Watanabe <watanabesj@gmail.com>
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:
Parameters as in either function or template paramters, template paramters can be types.
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.
No order means the parameters are not positional so _1, etc would be misleading.
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]
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
HTH, --Lorenzo