void test_autodecl(const Shape* shape) { double m = 0.0; Match(shape) { Case(Circle,c,r) std::cout << "Circle" << std::endl; m += r; XTL_UNUSED(c); break; Case(Square,c,s) std::cout << "Square" << std::endl; m += s; XTL_UNUSED(c); break; Case(Triangle,p) std::cout << "Triangle" << std::endl; m += p.first; break; Otherwise() std::cout << "Other" << std::endl; m += 2; break; } EndMatch }
void do_match(const Shape* s0) { const char* text = "unknown"; Match(s0) { Case(const Circle& a) text = "C"; XTL_UNUSED(a); break; Case(const Square& a) text = "S"; XTL_UNUSED(a); break; Case(const Triangle& a) text = "T"; XTL_UNUSED(a); break; Otherwise() text = "other"; break; } EndMatch std::cout << text << std::endl; }
void do_match(const Shape* s0, const Shape* s1) { const char* text = "unknown"; Match(s0,s1) { //Case(const Circle& a, const Circle& b) text = "C,C"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Circle& a, const Square& b) text = "C,S"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Square& a, const Circle& b) text = "S,C"; XTL_UNUSED(a); XTL_UNUSED(b); break; //Case(const Square& a, const Square& b) text = "S,S"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Square& a, const Triangle& b) text = "S,T"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Triangle& a, const Square& b) text = "T,S"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Triangle& a, const Triangle& b) text = "T,T"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Triangle& a, const Circle& b) text = "T,C"; XTL_UNUSED(a); XTL_UNUSED(b); break; Case(const Circle& a, const Triangle& b) text = "C,T"; XTL_UNUSED(a); XTL_UNUSED(b); break; Otherwise() text = "other"; break; }
void test_constant_variable(void) { TEST_CASE_(); int x = 100; Match(x) { Case(10) std::cout << 1 << std::endl; Case(100) std::cout << 2 << std::endl; Case(1000) std::cout << 3 << std::endl; } EndMatch int a = 3, b = 321; Match(a, b) { Case(3, 123) std::cout << 1 << std::endl; Case(1, 2) std::cout << 2 << std::endl; Case(3, 321) std::cout << 3 << std::endl; Otherwise() std::cout << "Otherwise..." << std::endl; }