fork download
  1. //g++ 5.4.0
  2.  
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. class Interface
  7. {
  8. public:
  9. virtual void sayHello() = 0;
  10. virtual void sayBye() = 0;
  11. };
  12.  
  13. class Foo: public Interface
  14. {
  15. public:
  16. Foo () { cout<< "Constr Foo\n"; }
  17. void sayHello() override {cout<< "Hello Foo\n"; }
  18. void sayBye() override {cout<< "Bye Foo\n"; }
  19. };
  20.  
  21. template <typename T>
  22. class Proxy: public T
  23. {
  24. public:
  25. void sayHello() { cout << "Proxy: "; T::sayHello(); }
  26. };
  27.  
  28. void use(Interface& inf)
  29. {
  30. inf.sayHello();
  31. inf.sayBye();
  32. }
  33.  
  34. int main()
  35. {
  36. Proxy<Foo> p;
  37. use(p);
  38. }
Success #stdin #stdout 0s 4372KB
stdin
Standard input is empty
stdout
Constr Foo
Proxy: Hello Foo
Bye Foo