Why did you chose operator>> instead of operator<< ? Because my intention was to show "control flow transition" which goes in my case from left to right, thus ">>" and not the other way around "<<".
// I think the choice is arbitrary and therefore hard to remember. Nope, it was intentionally. Also I had on my mind following syntax with
I don't think one should replace the switch... This sentence confuses me. What do you mean? You're either saying that we shouldn't try to extend "switch" anyhow or you meant something else. In case of( "switch shouldn't be extended..." ), then please explain your
eswitch( line ) >> // pass control to following "case_"
case_( ... ) >> // pass control to lambda and execute if case_ was matched
[]{...} >> // pass control to "falling_option"
fallthrough_ >> ...;
pipes "|":
eswitch( line ) |
case_( "^.+ 200 .+$"_r, []{...} ) |
case_( "^.+: .+$"_r, []{...} ) |
default_( []{...} );
position in more details? Otherwise it sounds like: "I just don't like it".
What I see everywhere, people actually extend "switch", for instance:
"Swift", "C#", "Java", "JavaScript", "LLVM StringSwitch" and I think there
is even more.
I think there is a reason for that, because "switch" is much convenient and
more readable then "if-elseif-else" in some cases.
By the way syntax isn't a problem, I can change it.
Regards
RAbdumalikov
вт, 12 нояб. 2019 г. в 12:32, Hans Dembinski
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.