#include #include #include #include #include using namespace boost::openmethod; struct B { virtual ~B() = default; }; struct C { virtual ~C() = default; }; struct A : C {}; struct D : B, A {}; BOOST_OPENMETHOD_CLASSES(D, C, B, A) using boost::openmethod::virtual_; BOOST_OPENMETHOD(a, (virtual_), void) BOOST_OPENMETHOD(b, (virtual_), void) BOOST_OPENMETHOD(c, (virtual_), void) BOOST_OPENMETHOD(d, (virtual_), void) BOOST_OPENMETHOD_OVERRIDE(a, (D &), void) { std::cout << "a(D)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(b, (D &), void) { std::cout << "b(D)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(c, (D &), void) { std::cout << "c(D)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(d, (D &), void) { std::cout << "d(D)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(a, (A &), void) { std::cout << "a(A)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(c, (A &), void) { std::cout << "c(A)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(c, (C &), void) { std::cout << "c(C)" << std::endl; } BOOST_OPENMETHOD_OVERRIDE(b, (B &), void) { std::cout << "b(B)" << std::endl; } int main() { boost::openmethod::initialize(); }