小技巧

来源:互联网 发布:mac cad格式问题 编辑:程序博客网 时间:2024/06/12 06:34

0 多字节字符集与Unicode适应

在Windows程序设计中,可以使用很多MS定义的宏来根据_UNICODE或UNICODE宏是否定义以决定编码中使用的函数或结构的具体版本:多字节字符集或Unicode版本。C++库中很多模版类的实例也是有多字节字符集与Unicode之分的,在使用纯C++做后台处理时,也可以跟随MS的这种思想,自己使用一个头文件来通过#define或typedef根据使方法调用适应字符编码版本。
#ifdef _UNICODE
#define tcout std::wcout
#define tstring std::wstring
#define tfstream std::wfstream
...
#else
#define tcout std::cout
#define tstring std::string
#define tfstream std::fstream
...
#endif

除了像sprintf_s(安全字符串方法)与wsprintf(抱歉,没找到安全版)这样参数列表不符的方法外,这样改变项目编码集时,几乎不需要改动代码。

1 Singleton模版函数

通常为了实现单例类:
1.1 每个类单独实现单例模式
1.2 创建一个单例模版类
缺点:
每个单例类独立实现单例模式一个类便要重写一次同样的代码,效率太低。
有点:
不需要特殊将该目标类设计为单例模式,保留该类可以定义对象的特性,使用时分清即可。
使用单例模版实际上是利用该类的实例获取静态方法而已,不若直接定义一个可全局获取到的(某命名空间下最好)单例模版函数,且不需要针对不同类的特性重载一些运算符,需要单例的类拥有什么样的特性直接利用。

namespace xts{    //template function for singleton    template <typename ClassName>    ClassName&              Singleton()    {        static std::auto_ptr<ClassName> s_Ins;        if (s_Ins.get() == nullptr)        {            s_Ins.reset(new ClassName());        }        return *s_Ins.get();    }}//若使用怕麻烦,可以直接在某个全局引用的文件中定义一个宏即可(如在某个专门用于宏定义的头文件)#define ClassName       Singleton<CClassName>()
0 0
原创粉丝点击