4 更好的使用标准库中的字符串类 (std::basic_string<class Char, class CharTraits, class Alloc>)

   如果在一个实际的项目中要使用标准库的std::string 或 std::wstring,会发现随着时间的推移,越会产生出重写一个自己的字符串类之冲动,而std::string的接口如此之好用,同时code里到处是std::string这样的东西,有时又要向多字节字符转换。此处有一个比较好的方案,不过最好从项目开始就实施:
   typedef unsigned char UChar;
   typedef unsigned short UWChar;

   typedef std::allocator StringAllocator;   // 使得以后有针对字符串分配优化

   typedef std::basic_string< UChar, std::char_traits<UChar>, StringAllocator<UChar> > String;
   typedef std::basic_string< UWChar, std::char_traits<UWChar>, StringAllocator<UWChar> > WString; // 宽字符版本

然后,在项目中就可以使用这个经过定制的String / WString。

5 函数名称重载是C++很好的特性,适当使用会带来很好的效果,有时却会自找麻烦,下面就是一例:
   class EntityDefination {
   public:
      //...
      Entity* GetEntity(const char* name);
      Entity* GetEntity(const unsigned id);   // 重载
   };
   自认为这样很好不是吗?
   有一次,我写了这样一行代码:
   Entity* result = entDef->GetEntity(0);
   知道,发生什么事吗,这是个对GetEntity(const unsigned id)的调用,虽说这是一行测试代码,但足以说明我的类接口上的信息缺了些,遂做了如下改动:
      Entity* GetEntityByName(const char* name);
      Entity* GetEntityByID(const unsigned id);

然后,看看:
     Entity× result = entDef->GetEntityById(0);   // 哈哈!错误一目了然,眼睛调试 :)



(to be continued!)