Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1683135
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: C/C++

2010-03-04 11:47:49

在C++的类模板里,除了可以带类型,还可以带类型参量.这里给初始化不同类似的值带来方便的,参考下面的代码.
 

#include <iostream>
using namespace std;

template<class TT,TT init>
class class2
{
public:
        TT data;
        class2()
        {
             data = init;
        }     
};

int main()
{
  class2<int,100> col;
  class2<double,3.3> co2;

  cout << col.data << endl;
  cout << co2.data << endl;
  return 0;
}

 

这个类模板有两个参数,一个是类型TT,另外一个类型是基于TT的常量init,这样在构造时,我们能用init去初始化对象内部数据.

在VC++ 6.0的执行结果如下,达到预期效果

100
3.3
Press any key to continue

但在RHEL 5/GCC 4.12编译结果是

[root@rhel5 test]# g++ test_temp.cpp -o test_temp
test_temp.cpp:23:2: warning: no newline at end of file
test_temp.cpp: In function 'int main()':
test_temp.cpp:18: error: 'double' is not a valid type for a template constant pa                                                                              rameter
test_temp.cpp:18: error: invalid type in declaration before ';' token
test_temp.cpp:21: error: request for member 'data' in 'co2', which is of non-cla                                                                              ss type 'int'

提示在不能double 来放入TT init.把template

 改成 template即可编译通过.但是这样已经失去了模板类型灵活的优点了.

结论:VC++模板对于模板常量的正确的.但GCC 4的处理很受局限

阅读(2440) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~