连续式平整度仪记录表:从VC6.0平台级到VS2008平台(之二)

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 18:51:37
从VC6.0平台级到VS2008平台(之二) 收藏
3、模板特殊化(Template specialization)
模板的特殊化是当模板中的pattern有确定的类型时,模板有一个具体的实现。例如假设我们的类模板pair 包含一个取模计算(module operation)的函数,而我们希望这个函数只有当对象中存储的数据为整型(int)的时候才能工作,其他时候,我们需要这个函数总是返回0。这可以通过下面的代码来实现:template class Pair {    T value1, value2;public:    Pair (T first, T second){        value1=first;        value2=second;    }    T module () {return 0;}};template <> class Pair {    int value1, value2;public:    Pair (int first, int second){        value1=first;        value2=second;    }    int module ();};//在模板特例化中,NET的特性template<> int Pair::module() {    return value1%value2;}这里要注意,在.NET中template<>是不需要的,否则会发生Compiler Error C2910Error Message 'function' : cannot be explicitly specialized错误,见:http://msdn.microsoft.com/en-us/library/cx7k7hcf(VS.80).aspx4、STLport VS VS2008:
因为VC6对标准C++的支持不够,所以我们用了STLport库,然而在VS2008下MS的已经差不多和标准相同了啊,所以,没有必要在使用STLport库。在整理工程中,把其去掉。5、旧的CRT库和新的安全CRT库引起的C4996告警
    解决了环境变量设置不匹配导致的问题后,编译过程就真正开始了,不过首先映入眼帘的应该是成堆的C4996编译告警,对每个使用了含字符串参数的CRT库函数都会有C4996编译告警,一个典型的输出如下所示:f:\project\.....\commonfunc.cpp(280) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
e:\software\microsoft visual studio 9.0\vc\include\string.h(74) : see declaration of 'strcpy'    MSDN online 是这样解释的:为了显著增加CRT库的安全性,许多CRT函数都有了一个更安全的新版本,新版本和旧版本的区别就是新版本函数名多了一个_s后缀。只要一个CRT函数有新的安全版本,编译器就会产生一个C4996告警,不过,出现这个告警的目的并不是说旧版本的CRT函数将淡出CRT库,告警出现只是为了提醒程序员这个函数有更安全的版本存在。一种安全的或者是被鼓励的做法是用安全版本的函数替换现有的CRT函数,不过对于一个有相当代码量的项目,替换工作量也是巨大的,这可不是用名称查找、替换就能简单解决的问题,因为许多安全版本的CRT函数参数个数也发生了变化。也可以用预处理指令消除这个告警:
#pragma warning( disable : 4996 )
或者定义 _CRT_SECURE_NO_WARNINGS 压制这个告警(在stdafx.h中define或在项目属性中设置预处理符号,PreProcessor Definitions)。    除了C语言的CRT函数外,POSIX 兼容函数也存在这个告警,解决方法是用POSIX标准名称替换(比如access换成_access)或者是定义 _CRT_NONSTDC_NO_WARNINGS 压制这个告警(方法同上)。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangbinjn/archive/2009/09/04/4516785.aspx