// Copyright (c) 2018-2025 Jean-Louis Leroy // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) //[ all #include #include struct static_registry : boost::openmethod::registry {}; #define BOOST_OPENMETHOD_DEFAULT_REGISTRY static_registry #include #include #include #include struct Animal {}; struct Dog : Animal {}; struct Cat : Animal {}; using namespace boost::openmethod::aliases; BOOST_OPENMETHOD_CLASSES(Animal, Dog, Cat); BOOST_OPENMETHOD(poke, (virtual_ptr, std::ostream&), void); BOOST_OPENMETHOD_OVERRIDE( poke, (virtual_ptr dog, std::ostream& os), void) { os << "bark\n"; } BOOST_OPENMETHOD_OVERRIDE( poke, (virtual_ptr cat, std::ostream& os), void) { os << "hiss\n"; } int main() { boost::openmethod::initialize(); unique_virtual_ptr a = make_unique_virtual(), b = make_unique_virtual(); poke(a, std::cout); // hiss poke(b, std::cout); // bark return 0; } //]