刚下班的时候在写一个小DEMO,主要是能让程序能在ANSI和UNICODE都能正常编译运行的,对于程序的所有的字串我有这样的定义:
#ifdef _UNICODE
typedef std::wstring String;
#else
typedef std::string String;
#endif
这样在程序中能随便使用String这个东西,后来在写一个函数的时候发现了一个问题,对于默认字串参数的函数时一般写成 const String & s = "" 后来编译遇到了问题,就是说类型赋值的问题,因为""不能自动转换为UNICODE,就算对String的操作也是不能自动转换的,后来找了找使用宏是一个比较方便的处理方式,具体宏为:
#ifdef _UNICODE
typedef std::wstring String;
#define S(A) L##A
#else
typedef std::string String;
#define S(A) A
#endif
这样对于那样的默认参数就写成了const String & s =S( ""),这个真是好用啊,后来又查查资料,发现我一下没想起来的系统宏定义 _T与_TEXT 记得以前也用过,_T/_TEXT的宏定义就是L##(字符串) ,L表示长型,及定义的字符串中每个字符为16位(宽字符) 。呵呵呵---发现自己想到了和系统一样的东西了,还是要记录下,不为别的,只鼓励下自己的思考。
其实宏在使用的时候也有很多不好的地方,我相信做程序的都知道,对于宏展开和无类型约束的缺点还是要警惕!