|
Boost Users : |
Subject: [Boost-users] [Proto] Difficult Arity Check
From: Hossein Haeri (powerprogman_at_[hidden])
Date: 2011-01-15 06:31:05
Dear all,
I have a syntax like
((_1 >> &f1 >> &f2) || (_2 >> &f3) || (_3 >> &f4 >> &f5 >> &f6)) >> g
for which I already have a small grammar which along with my context do their job fine. The above expression is to act like
g(f2(f1(x)), f3(y), f6(f5(f4(z))))
once invoked with _1 == x, _2 == y, and _3 == z. I am currently trying to add a safety layer on top of that which can emit a compile-error -- at the appropriate corner of my code -- that can prevent pass of functions with wrong arities. For example, g above needs to be a ternary.
Although my context will notice it if g is not a ternary and produce a meaningful error message, that's too late. My poor user needs to be informed right at the instantiation time. So, I thought I'm going to use transforms to get my grammar manage that.
To that end, I thought the _state of my grammar needs to be an MPL pair of an mpl::int_ and an mpl::bool_. Below is my algorithm with some plain English explanation. Please would someone help me for I found it utterly formulate that in Proto.
1) when<terminal<_>, mpl::pair<mpl::int_<1>, mpl::true_> > -- so far, so easy.
2) When logical_or<Arity, Arity>, return summation of the two arities, paired with the logical and of success value in the two branches:
mpl::pair
<
mpl::plus
<
typename _state(EmtnArity(_left))::first,
typename _state(EmtnArity(_right))::first
>,
mpl::and_
<
typename _state(EmtnArity(_left))::second,
typename _state(EmtnArity(_right))::second
>
>
(This doesn't compile.)
3) When shift_right<Arity, Arity>, return mpl::int_<1> again, but, this time, paired with whether or not the right arity has been passed around logically anded with the success value so far:
mpl::pair
<
mpl::int_<1>,
mpl::and_
<
typename _state(EmtnArity(_left))::second,
is_callable_with_args(***)
>
>
And, I'm totally stuck in the use of is_callable_with_args!
Any helps please? Feel free to pass a completely new design too.
TIA,
--Hossein
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