1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include<stdio.h> #include<assert.h> #include "vector" #define AfxGetApp() KSingleton<CWinApp>::GetSingleton() #define DEBUG template<typename T> class KSingleton { private: static T* ms_pSingleton; public: KSingleton() { assert(NULL == KSingleton<T>::ms_pSingleton); KSingleton<T>::ms_pSingleton = (T*)this; } ~KSingleton() { KSingleton<T>::ms_pSingleton =NULL; } static T* GetSingleton() { return ms_pSingleton; } }; /*static*/ template<typename T> T* KSingleton<T>::ms_pSingleton = NULL; class CWinApp : public KSingleton<CWinApp> { public: void Print() { printf("hello\n"); } }; CWinApp theApp; void main() { //KSingleton<CWinApp>::GetSingleton()->Print(); //위에서 메크로 적용 AfxGetApp()->Print(); #ifdef DEBUG //cmd char e; scanf("%c",&e); #endif } |