4 ms·
Modern pattern matching and multimethods for C++ (+faster than visitor pattern)
CppCon 2014 "Accept no visitors":
https://www.youtube.com/watch?v=QhJguzpZOrk
Mach7 Library:
https://github.com/solodon4/Mach7
An example from the slides:
struct BoolExp { virtual~BoolExp() {} };
struct VarExp: BoolExp{ std::string name; };
struct ValExp: BoolExp{ boolvalue; };
struct NotExp: BoolExp{ BoolExp* e; };
struct AndExp: BoolExp{ BoolExp* e1; BoolExp* e2; };
struct OrExp: BoolExp{ BoolExp* e1; BoolExp* e2; };
....
bool eval(Context& ctx, constBoolExp* exp)
{
var<std::string> name; var<bool> value; var<constBoolExp*> e1, e2;
Match(exp)
{
Case(C<VarExp>(name) ) return ctx[name];
Case(C<ValExp>(value)) return value;
Case(C<NotExp>(e1) ) return !eval(ctx, e1);
Case(C<AndExp>(e1,e2)) return eval(ctx, e1) && eval(ctx, e2);
Case(C<OrExp>(e1,e2)) return eval(ctx, e1) || eval(ctx, e2);
}
EndMatch
}
- seansh 12y agoOops, looks like the formatting is messed up... See here: http://pastie.org/9684691 http://pastie.org/9684691