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 }