1 #if GOLDEN_RETURN_TYPE_DIFF
2 #define LISTEN_RETURN_TYPE \
3     int
4 #define LISTEN_RETURN_STATEMENT \
5     return 0;
6 #else
7 #define LISTEN_RETURN_TYPE \
8     void
9 #define LISTEN_RETURN_STATEMENT \
10     return;
11 #endif
12 
13 #if GOLDEN_VTABLE_DIFF
14 #define VIRTUAL_FUNCTIONS \
15     virtual LISTEN_RETURN_TYPE Listen() = 0; \
16     virtual void Speak() = 0; \
17     static void SpeakLouder();
18 #else
19 #define VIRTUAL_FUNCTIONS \
20     virtual void Speak() = 0; \
21     virtual LISTEN_RETURN_TYPE Listen() = 0; \
22     void SpeakLouder();
23 #endif
24 
25 #if GOLDEN_ENUM_EXTENSION
26 #define LOUD_SUPERLATIVES \
27     Loudest = 3, \
28     Lower = 4,\
29     LouderThanLoudest = 5
30 #elif GOLDEN_ENUM_DIFF
31 #define LOUD_SUPERLATIVES \
32     Loudest = -1,
33 #else
34 #define LOUD_SUPERLATIVES \
35     Loudest = 3, \
36     Lower = 4
37 #endif
38 
39 class SuperSpeaker {
40   enum Volume {
41     Loud = 1,
42     Louder = 2,
43     LOUD_SUPERLATIVES
44   };
45 #if GOLDEN_CHANGE_FUNCTION_ACCESS
46  private:
47 #else
48  public:
49 #endif
50   static SuperSpeaker *CreateSuperSpeaker(int id);
51  public:
52   VIRTUAL_FUNCTIONS
53   Volume SpeakLoud();
SpeakLoudest()54   void SpeakLoudest() { };
55 
~SuperSpeaker()56   virtual ~SuperSpeaker() { }
57  private:
58 #if GOLDEN_CHANGE_MEMBER_NAME_SAME_OFFSET
59   int mSpeakderId_;
60 #else
61   int mSpeakderId;
62 #endif
63 #if GOLDEN_FUNCTION_POINTER
64 #if GOLDEN_FUNCTION_POINTER_ADD_PARAM
65   SuperSpeaker * (*speaker_fp)(int, char, int);
66 #else
67   SuperSpeaker * (*speaker_fp)(int, char);
68 #endif
69 #endif
70 };
71