1 /* Copyright Bruno da Silva de Oliveira 2003. Use, modification and 2 distribution is subject to the Boost Software License, Version 1.0. 3 (See accompanying file LICENSE_1_0.txt or copy at 4 http://www.boost.org/LICENSE_1_0.txt) 5 */ 6 namespace virtual_ { 7 8 struct C 9 { 10 public: fC11 virtual int f() 12 { 13 return f_abs(); 14 } 15 barC16 virtual void bar(int) {} barC17 virtual void bar(char*) {} 18 get_nameC19 const char* get_name() 20 { 21 return name(); 22 } dummyC23 virtual int dummy() { return 0; } 24 25 protected: 26 virtual int f_abs() = 0; 27 28 private: nameC29 virtual const char* name() { return "C"; } 30 }; 31 32 struct D 33 { dummyD34 virtual int dummy() { return 0; } 35 }; 36 call_f(C & c)37inline int call_f(C& c) { return c.f(); } call_dummy(C * c)38inline int call_dummy(C* c) { return c->dummy(); } call_dummy(D * d)39inline int call_dummy(D* d) { return d->dummy(); } 40 41 } 42