Advertisement
robn

Untitled

Jun 7th, 2011
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. class mixin_base {
  4. public:
  5.     mixin_base() : m_flags(0) {
  6.         printf("in mixin_base constructor\n");
  7.     }
  8.  
  9.     int m_flags;
  10.  
  11. protected:
  12.     void set_mixin_flags(int flags) {
  13.         m_flags |= flags;
  14.         printf("mixin_base adding flags %x, now %x\n", flags, m_flags);
  15.     }
  16. };
  17.  
  18. template <typename T>
  19. class mixin1 : public T, virtual public mixin_base {
  20. public:
  21.     mixin1() : mixin_base() {
  22.         printf("in mixin1 constructor\n");
  23.         set_mixin_flags(0x1);
  24.     }
  25. };
  26.  
  27. template <typename T>
  28. class mixin2 : public T, virtual public mixin_base {
  29. public:
  30.     mixin2() : mixin_base() {
  31.         printf("in mixin2 constructor\n");
  32.         set_mixin_flags(0x2);
  33.     }
  34. };
  35.  
  36. class thing {
  37. public:
  38.     thing() {
  39.         printf("in thing constructor\n");
  40.     }
  41. };
  42.  
  43. int main(int argc, char **argv) {
  44.     mixin1< mixin2< thing > > x;
  45.     printf("x flags: %x\n\n", x.m_flags);
  46.  
  47.     mixin2< mixin1< thing > > y;
  48.     printf("y flags: %x\n\n", y.m_flags);
  49.  
  50.     mixin1< thing > z;
  51.     printf("z flags: %x\n", z.m_flags);
  52.  
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement