Files
openmethod/examples/headers_namespaces/main_using_directive.cpp
2025-04-21 08:02:33 -04:00

43 lines
954 B
C++

#include <iostream>
#include <boost/openmethod.hpp>
#include <boost/openmethod/compiler.hpp>
#include "animal.hpp"
#include "cat.hpp"
#include "dog.hpp"
using namespace animals;
using namespace canines;
using namespace felines;
struct Bulldog : Dog {
using Dog::Dog;
};
BOOST_OPENMETHOD_CLASSES(Dog, Bulldog);
BOOST_OPENMETHOD_OVERRIDE(
poke, (std::ostream & os, virtual_ptr<Bulldog> dog), void) {
next(os, dog);
os << " and bites back";
}
auto main() -> int {
boost::openmethod::initialize();
std::unique_ptr<animals::Animal> felix(new Cat("Felix"));
std::unique_ptr<animals::Animal> snoopy(new Dog("Snoopy"));
std::unique_ptr<animals::Animal> hector(new Bulldog("Hector"));
poke(std::cout, *felix); // Felix hisses
std::cout << ".\n";
poke(std::cout, *snoopy); // Snoopy barks
std::cout << ".\n";
poke(std::cout, *hector); // Hector barks and bites
std::cout << ".\n";
return 0;
}