C++ framework of matcher objects