//--------------------------------------------------------------------------- #ifndef TTClassH #define TTClassH //--------------------------------------------------------------------------- // Template Smart Class // // Written by ±èżº cppbuilder@naver.com //--------------------------------------------------------------------------- // Template new // delete °¡ ÇÊ¿ä¾ø´Â ½º¸¶Æ® new. // ¸Þ¸ð¸®¸¦ Èü¿¡ ÇÒ´ç¹Þ°í ÀÚµ¿À¸·Î ¼ÓÀº 0·Î ÃʱâÈ­ ÇÑ´Ù. // ±×·¯¹Ç·Î, ±âº»Çü°ú String ¿Ü typename T°¡ »ý¼ºÀÚ¸¦ °ÅÄ£ÈÄ 0À¸·Î ÃʱâÈ­ µÇ¸é ¾ÈµÇ´Â Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ¾ÈµÇ³ª, // »ç¿ëÇØ¾ß ÇÒ¶§´Â »ý¼ºÀÚ¿¡¼­ ZeroMemory°¡ µ¿ÀÛÇÏÁö ¾Ê¾Æ¾ß ÇϹǷΠ»ý¼ºÀÚ(Å©±â,false) ¸¦ ÀÎÀÚ·Î ÁØ´Ù. // Âü°í:String, TStringList, TList ´Â »ý¼ºµÈ Á÷ÈÄ ¸Þ¸ð¸®°¡ ¸ðµÎ 0À̹ǷÎ, 0À¸·Î ÀçÃʱâÈ­ °¡´ÉÇÏÁö¸¸ ÀϺη¯ ±×·² ÇÊ¿ä¾ø´Ù. // template class Tnew { private: int m_Size; public: T *p; __property int Count = { read = m_Size }; // read only public: Tnew(int SIZE, bool bClear = true) { p = new T[SIZE]; if (bClear) ZeroMemory(p, sizeof(T) * SIZE); m_Size = SIZE; } ~Tnew() { delete[] p; } Tnew& operator=(Tnew& src) { delete[] p; p = new T[src.Count]; memcpy(p, (T *)src, src.Count * sizeof(T)); m_Size = src.Count; return *this; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- // ÀϹÝÀûÀÎ VCL ½ºÅ¸ÀÏ Å¬·¡½º¸¦ Á¤ÀûÀ¸·Î »ý¼ºÇÏ´Â ÅÛÇø´ Ŭ·¡½º // ´Ü, »ý¼ºÀÚÀÇ ÀÎÀÚ¸¦ TComponent ·Î Çϴ Ŭ·¡½ºÀ̾î¾ß ÇÔ. // ¸ðµç ÄÄÆ÷³ÍÆ®¿Í Æû µîÀÇ ¼ö¸¹Àº VCL Style Ŭ·¡½º°¡ ÇØ´çµÊ. template class TTVCL { public: T *p; public: TTVCL(TComponent *Owner) { p = new T(Owner); } ~TTVCL() { delete p; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- // ÀϹÝÀûÀÎ VCL ½ºÅ¸ÀÏ Å¬·¡½º¸¦ Á¤ÀûÀ¸·Î »ý¼ºÇÏ´Â ÅÛÇø´ Ŭ·¡½º // »ý¼ºÀÚÀÇ ÀÎÀÚ¸¦ °¡ÁöÁö ¾Ê´Â Ŭ·¡½º¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. // TStringList, TList µî... template class TTClass { public: T *p; public: TTClass() { p = new T; } ~TTClass() { delete p; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- #endif