On 2019-11-12 13:32, Hans Dembinski via Boost wrote:
I don't like this syntax, it is awkward and making the code less readable.
1) You are replacing a normal switch, which may be limited in its abilities but is well known even to beginners with something that has a rather unintuitive syntax. The shift operators are associated to streaming in C++ these days, but you use them differently here. Someone who reads this code who is not familiar with eswitch will not immediately understand this. Why did you chose operator>> instead of operator<< ? I think the choice is arbitrary and therefore hard to remember.
2) Your syntax requires one to type a lot of characters. I don't think one should replace the switch but if one did, the following syntax would be more economic and easier to remember, because it is less arbitrary
eswitch( value, case(match1), lambda1, case(match2), lambda2 , … , default(), lambdaN );
PS: I forgot to replace `case` by `case_` and `default` by `default_` but you get the idea.
On the topic of better syntax, there are a few examples in Boost: https://www.boost.org/doc/libs/1_71_0/libs/phoenix/doc/html/phoenix/modules/... https://www.boost.org/doc/libs/1_71_0/doc/html/lambda/le_in_details.html#lam... Though, I'm not convinced about the usefulness of the proposed eswitch library.