模板类请教

羽飞 2012-02-27 08:07:35
假如有这样一个模板类:

template<class T, size_t size = 1024>
class CC
{
//....
};

请教大虾们:
CC<int, 100>和CC<int, 200>
是不是同一个类?
求解释
...全文
392 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2012-03-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 pengzhixi 的回复:]

貌似我说的就是理论
[/Quote]
是啊呵呵,不我鄙人愚钝,需要时间消化
pengzhixi 2012-03-01
  • 打赏
  • 举报
回复
貌似我说的就是理论
羽飞 2012-03-01
  • 打赏
  • 举报
回复
其实我在设计这个类的时候已经知道不是同一个类了,就是想看看大侠们有没有理论上的解释,而不是摆事实
yd250990477 2012-02-29
  • 打赏
  • 举报
回复
正解,可以结贴了
程序员小迷 2012-02-29
  • 打赏
  • 举报
回复
这个不能一定就判定结果,因为仅仅是数值,也许编译器会做优化,要看代码实现:



#include <iostream>
#include <typeinfo>
using namespace std;

template<class T, size_t size = 1024>
class CC
{

};

int main(int argc, char* argv[])
{
CC<int, 100> c1;
CC<int, 200> c2;

cout << typeid(c1).name() << endl;
cout << typeid(c2).name() << endl;

return 0;
}



gcc 4.2输出:


2CCIiLm100EE
2CCIiLm200EE



所以不是一种类型
hondely 2012-02-29
  • 打赏
  • 举报
回复
汇编 还真是看不懂
羽飞 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 akirya 的回复:]

引用 2 楼 hnwyllmm 的回复:

还有没有高人详细的解释一下

#1 已经很明确的解释了 。。。
[/Quote]
呵呵,是很清楚了,但是鄙人愚钝,不太明白,下面的大侠们解释的很详细,受益匪浅
ryfdizuo 2012-02-28
  • 打赏
  • 举报
回复
类模板参数不同,实例化以后的类当然就不一样了。
ma100 2012-02-28
  • 打赏
  • 举报
回复
如果template<class T, size_t size = 1024>里面有虚函数
并且CC<int, 100>和CC<int, 200>有至少1个不同的实现
则显然说明这是2个类

如果1024里面没虚函数,你也可以说成是2个类,但没任何区别
luciferisnotsatan 2012-02-28
  • 打赏
  • 举报
回复
1楼不说的很明确了?
seucs 2012-02-28
  • 打赏
  • 举报
回复
如上面的汇编代码所示。生成了两个不同的构造函数,所以不是同一个类型的
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnwyllmm 的回复:]

还有没有高人详细的解释一下
[/Quote]
#1 已经很明确的解释了 。。。
pengzhixi 2012-02-28
  • 打赏
  • 举报
回复
使用这种template时必须明确使用数值才能具现化,而每一个具现化的class template都有各自的类型
seucs 2012-02-28
  • 打赏
  • 举报
回复
不是同一个类,看下面的例子

template<class T, unsigned size = 1024>
class CC
{
public:
CC(){}
};

int main()
{
CC<int, 100> c1;
CC<int, 200> c2;

return 0;
}


编译成汇编以后,你看注释部分

.file "test.cpp"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
call ___main
leal -1(%ebp), %eax
movl %eax, (%esp)
call __ZN2CCIiLj100EEC1Ev
leal -2(%ebp), %eax
movl %eax, (%esp)
call __ZN2CCIiLj200EEC1Ev
movl $0, %eax
leave
ret
.section .text$_ZN2CCIiLj100EEC1Ev,"x"
.linkonce discard
.align 2
.globl __ZN2CCIiLj100EEC1Ev
.def __ZN2CCIiLj100EEC1Ev; .scl 2; .type 32; .endef
__ZN2CCIiLj100EEC1Ev: ; CC<int, 100> 的构造函数
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.section .text$_ZN2CCIiLj200EEC1Ev,"x"
.linkonce discard
.align 2
.globl __ZN2CCIiLj200EEC1Ev ; CC<int, 200> 的构造函数
.def __ZN2CCIiLj200EEC1Ev; .scl 2; .type 32; .endef
__ZN2CCIiLj200EEC1Ev:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.def __ZN2CCIiLj200EEC1Ev; .scl 3; .type 32; .endef
.def __ZN2CCIiLj100EEC1Ev; .scl 3; .type 32; .endef

bluewanderer 2012-02-28
  • 打赏
  • 举报
回复
你每提供一组不同的参数都会实例化出一个不同的类型。

你可以直接用type_traits里的std::is_same看看
羽飞 2012-02-28
  • 打赏
  • 举报
回复
还有没有高人详细的解释一下
pengzhixi 2012-02-27
  • 打赏
  • 举报
回复
当然不是同一个类了。因为你最终的模板参数不一致。100和200是不同的模板实参
这是一套书桌背景的读书分享会PPT模板,共24页; PPT模板封面使用了摆放了书籍、茶杯等物品的书桌背景图片。中间使用棕色字体填写读书分享会PPT标题文字。右侧放置柳条图案装饰。 PPT内容页,使用了多张卡通书籍插图、学生读书插图、卡通动物插图等,搭配读书分享会文字排版。 读书分享会PPT内容简介: 一、为什么要课外阅读 作为基础教育中的基础学科,语文在学生整个学习和社会生活中有十分重要作用。 抓好语文中的阅读训练,不仅可以培养学生良好的阅读习惯,扩大视野,拓展学生的思维能力,提高学生的写作能力,为学好其他学科打下坚实基础; 还可以让学生在学习语文的同时,通过阅读优秀作品,感悟生活,体会到人间的真、善、美,从而培养正确的人生观、世界观。  学生读课外书籍要养成习惯。先看序文或作者、编者的前言,知道全书的概况,是好习惯。把书估计一下,预定若干日读完,而且如果能按期看完,是好习惯 。有不了解处,不怕查工具书,不怕请教老师或者朋友,是好习惯。自己有所得,随手写简要的笔记是好习惯。其实说不好的习惯,半途而废,以及眼睛在书上,脑子开小差,都非常不好。 ——叶圣陶  书籍—通过心灵观察世界的窗口。住宅里没有书,犹如房间里没有窗户。 ---威尔逊  书合理安排时间,就等于节约时间。 ---鲁迅 书籍是朋友,虽然没有热情,但是非常忠实。 ---雨果 读书好似爬山,爬得越高,望得越远;读书好似耕耘,汗水流得多,收获更丰满。 ---臧克家 书籍是全世界的营养品.生活里没有书籍,就好像没有阳光。 ---莎士比亚 我读书奉行九个字,就是“读书好,好读书,读好书”。 ---冰心 ... 二、应该怎样读课外书 标:圈圈点点明重点 读书时可以根据不同的要求在自己的书上做上种种不同的符号。如有疑问的地方用“?”,精彩的地方用“____”。同时也要在阅读时明确不同体裁的读物有不同的要求。 此外,对各类文章中精彩的重点段,还要会理解、会背诵、会仿写。这样既能提高理解能力,又为写作打下了基础。 童话寓言重在明理 历史故事重在懂得故事梗概 诗词歌赋重在通过朗读体会情意 科普读物应明白书中的科学道理 要把摘记在笔记本里的内容搬进头脑这个“贮存库”里,这就必须经常翻阅笔记本,熟读所记内容直到背诵,这样日积月累头脑里的东西越来越多,到了写作的时候,要什么有什么,信手拈来,自然就得心应手了。 ... 三、怎么做好读书笔记 用白卡片最好(可根据文字量的多少,自由调整行数),卡片规格13厘米×8.5厘米。 一张卡片记一个内容,标明醒目的标题。 写卡片的体例要一致。如题目、内容、出处,要按照自己规定的格式写,不得随意更。 字迹要清楚,不可马虎。“一字不清,误事千载。”写毕,须仔细校对,避免差错。 卡片使用后,及时归回到所属的类、目、子目序列中。 读书笔记类型:  摘抄型 摘抄文章中的格言警句、美词    佳句、内容要点,或把文章中精彩的片段,好的开头、结尾,原文照录。  感想型 再读完一本读物后,结合现实和个人经历写出对有关问题的认识及感想和体会,提高分析事物的能力。  归纳型 归纳出文章的主要内容或各段(各部分)的小标题。  评价型 即评价书中人物,或真或伪,或善或恶;或美或丑等等。   想象型 主要是续编故事,改写故事,发展联想和想象能力,从而培养创新思维。 ... 四、课外阅读推荐书目 《西游记》——吴承恩 《童年》——高尔基 《水浒传》——施耐庵 《名人传》——罗曼罗兰 《朝花夕拾》——鲁迅 《骆驼祥子》——老舍 《繁星·春水》——冰心 《红楼梦》——曹雪芹 《鲁滨孙漂流记》 《格列佛游记》 《钢铁是怎样炼成的》 《三国演义》——罗贯中 关键词:如何读书PPT下载,读书分享会PPT模板免费下载,.PPTX格式;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧