CompBook 板


C++ Primer 答客问 (40) - static in template 侯捷 [email protected] 2000.03.25 第一次发表於 清大.枫桥驿站(140.114.87.5).电脑书讯版(Computer/CompBook) 本文将於日後整理於 侯捷网站/侯捷译作/C++ Primer 中文版/答客问 侯捷网站:www.jjhou.com ---------------------------------------------------------------- s874105 wrote (2000/03/03) : > 老师你好... > 我有两个问题,一个是跟课内有关一个是我看书的问题。 > > 假设今天有一个 class template > > template<typename T> > class vi > { > static void func(T a) { cout << a << " "; } > }; > > 像这样的 static member function ... 可以成为 template 的一份子吗? > 如果可以,是什麽道理呢?因为就我的想法中, > static member 是要事先就先配置好。所以我怎麽想都想不出方法。 > > 第二个问题有关於 cast > 问题源自 Polymorphism in C++ (多型与虚拟) p164. > 书里面写着 > char str[] = "Hello"; > char *pc = &str // error > > 错误讯息是 cannot convert form 'char (*)[6]' to 'char *' ... > 那麽当 cout << str 时,operator<< 有支援 char (*)[6] 这种 type 吗? > 还是输出时有先转型过呢?假设今天转型过後,他的型态被改变了, > 对他本身的阵列会有什麽影响呢?如果没有影响,我实在不懂为什麽 > type 要设成 char (*)[6] 说... > 因为我一直认为 operator<< 只支援 "char" & "int" & "float" & "double"... > 这问题很笨,可是我一直搞不懂... 只好问一下老师了~ 谢谢... 侯捷回覆: 这问题不笨。只要思考过的问题,都不笨。 你的第一个问题,template 的 members 可否为 static。 如果只是想要确定可不可以,写个程式不就结了 :) #include <iostream> using namespace std; template<typename T> class C { public: static void func() { cout << m_data << " "; } C(T data) { m_data = data; } private: static T m_data; }; // static data member initialization.(注意,很多人会忘记写这行) template<typename T> T C<T>::m_data; int main() { C<int> c1(5); C<float> c2(9.28); C<char> c3('J'); c1.func(); // 5 c2.func(); // 9.28 c3.func(); // J } 这个程式中的 class template 既有 static data member,也有 static member function。可顺利编译。执行结果也正确。 《C++ Primer 中文版》16.5 节「Class Templates 的 Static Data Members」 便是专讲这个题目。 我想你这个问题更有价值的是,你问: > 如果可以,是什麽道理呢?因为就我的想法中, > static member 是要事先就先配置好。所以我怎麽想都想不出方法。 你的说法不够精准,应该说:「static member 是独立於 class 之外配置的」。 修正成这样,你应该就不会有问题了。注意,template instantiation 是在 编译时期(而非执行时期)完成;面对 static members,编译器会为每一个 template instantiation 制作出一份相应的 static members。 所以上例的三个 instantiations,各有自己的一份 m_data 和一份 func()。 你的第二个问题: char str[] = "Hello"; char *pc = &str; // error 这个问题,《多型与虚拟》书中说,必须写为这样才可编译: char str[] = "Hello"; char *pc = (char*)&str; // 明白转型. 亦可利用 C++ cast operators. 你问: > 那麽当 cout << str 时,operator<< 有支援 char (*)[6] 这种 type 吗? 有可能。 > 还是输出时有先转型过呢? 我不知道。也有可能。 > 假设今天转型过後,他的型态被改变了, > 对他本身的阵列会有什麽影响呢? 没有影响。资料被转型,改变的是外界(也就是将它转型的人)对它 的「看法」,并不影响资料本身。 > 如果没有影响,我实在不懂为什麽 > type 要设成 char (*)[6] 说... > 因为我一直认为 operator<< 只支援 "char" & "int" & "float" & "double"... 你一定忘了,C++ 允许 operator overloading(多载化运算子)。 -- the end  -- ※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw> ◆ Mail: [email protected]







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草
伺服器连线错误,造成您的不便还请多多包涵!
「赞助商连结」





like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP