Str.h
上传用户:mgf822
上传日期:2013-10-03
资源大小:133k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. #if !defined(__STR_H__)
  2. #define __STR_H__
  3. #include <string.h>
  4. class CStr
  5. {
  6. public:
  7. // constructors and destructor
  8. CStr(const CStr& str);
  9. CStr(const char* str);
  10. CStr(const double var) { VarToString(var); }
  11. CStr() { m_nLength = 0; m_pString = 0; }
  12. virtual ~CStr() { if (m_pString) delete m_pString; }
  13. // operator overloading helper
  14. template <class T> friend CStr _cdecl operator +(T var, const CStr& str);
  15. // operator overloading
  16. CStr& operator  =(const char* str);
  17. CStr& operator  =(const CStr& str);
  18. CStr& operator  =(const double var) { VarToString(var); return *this; }
  19. template <class T>
  20. CStr  operator  +(T var) { CStr tstr = *this; return tstr += var; }
  21. CStr& operator +=(double str) { return *this += (CStr)str; }
  22. CStr& operator +=(const char* str) { return *this += (CStr)str; }
  23. CStr& operator +=(const CStr& str);
  24. // add more logic comparison operators as following, for example, although not efficient
  25. virtual bool operator !=(char* str) { return strcmp(str, m_pString) != 0; }
  26. // c type string conversion
  27. operator char* () { return m_pString; }
  28. operator const char* () const { return m_pString; }
  29. char* GetChar() { return m_pString; }
  30. // numeric conversion
  31. template <class T> GetValue(T& var) { return GetVar(var); }
  32. // search the match string : WildCards can be '?' and '*' combination
  33. // return value : true (pattern matchs string), false (no match)
  34. bool Search(const char* WildCards) { return Match((char*)WildCards, m_pString); }
  35. // format string
  36. int Format(const char* format, ...);
  37. protected:
  38. // can use faster algorithm for search ?
  39. virtual bool Match(char*, char*);
  40. virtual bool Scan(char*&, char*&);
  41. // have any good conversion method ?
  42. virtual void VarToString(const double var);
  43. // numeric conversion helpers
  44. bool NumericParse(void* pvar, char flag);
  45. bool GetVar(bool& var) { return NumericParse((void*)&var, 'b'); }
  46. bool GetVar(char& var) { return NumericParse((void*)&var, 'c'); }
  47. bool GetVar(short& var) { return NumericParse((void*)&var, 's'); }
  48. bool GetVar(int& var) { return NumericParse((void*)&var, 'i'); }
  49. bool GetVar(long& var) { return NumericParse((void*)&var, 'l'); }
  50. bool GetVar(float& var) { return NumericParse((void*)&var, 'f'); }
  51. bool GetVar(double& var) { return NumericParse((void*)&var, 'd'); }
  52. bool GetVar(unsigned char& var) { return NumericParse((void*)&var, 'C'); }
  53. bool GetVar(unsigned short& var) { return NumericParse((void*)&var, 'S'); }
  54. bool GetVar(unsigned int& var) { return NumericParse((void*)&var, 'I'); }
  55. bool GetVar(unsigned long& var) { return NumericParse((void*)&var, 'L'); }
  56. // data block
  57. int   m_nLength;
  58. char* m_pString;
  59. };
  60. template <class T>
  61. CStr operator +(T var, const CStr& str) 
  62. CStr svar = var;
  63. return svar += str; 
  64. }
  65. #endif