关于《C++ Template》中的一点迷思!

pjy717 2006-11-08 11:19:32
在书中《C++ Template》中的15.1.6中提到:
The major advantage of accessing policy classes through template template parameters is that it makes it easier to have a policy class carry with it some state information (that is, static data members) with a type that depends on the template parameters. (In our first approach the static data members would have to be embedded in a member class
template.)
如果有书的朋友可以看到,此段话中最后括号中的一句话:
In our first approach the static data members would have to be embedded in a member class
template。(我这样理解这句话:在我们的第一种方法中,不得不把static数据成员嵌入到成员类模板中)。
但是我发现这一章中,没有任何地方用到成员类模板。它所说的第一种方法我想就是把Policy类用一般的类(不用模板类)实现,其中用到了成员函数模板,也没有用到member class template。
并且这里的static数据成员指的是哪个数据成员呢?是不是这个地方错了?然后我看候捷跟李伟柱的中译本,他们也是这样翻译的,难道他们也将错就错,没有给读者指出来?,我想还是我错了,但我实在找不出来这句话对在什么地方?那位同行请指点一二,先谢谢了!!!
还有第一句说的The major advantage of accessing policy classes through template template parameters is that it makes it easier to have a policy class carry with it some state information (that is, static data members),这里的static data member又指哪个数据成员呢?
...全文
723 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
pjy717 2006-11-09
  • 打赏
  • 举报
回复
一家(家都谈不上,应给是一人)之言,岂敢贸然确认,还需大家的指正!
taodm 2006-11-09
  • 打赏
  • 举报
回复
呵呵,别那么没自信嘛。
pjy717 2006-11-09
  • 打赏
  • 举报
回复
不知我上面的说法是否有误?
pjy717 2006-11-09
  • 打赏
  • 举报
回复
嗯。是的,把静态变量到member funtion template中确实对其所在的类对其的使用就太狭隘了。
不过对于书中的AccumulationTraits如果改装成Policy的第一种做法的话(毕竟它只用到静态成员作为初始化来用,~_~,不过后来还是调用函数的方式),其他的先不谈(就是对于AccumulationTraits中的Acct先不管,要管就在里面搞一个member class template,然后对其特化之!^-^,南辕北辙哦!),我想把静态变量放到member funtion template中,然后特化这个member function template,我想是可以的。这点没错吧?

最后向taodm表示我深深的感谢!向你鞠躬!!!
taodm 2006-11-09
  • 打赏
  • 举报
回复
呃,放到函数里,那么就只有这个函数才能使用这个变量了。如果专门有一个函数就只负责返回这个变量的值,那也无法在编译期使用这个变量呀。那C++还要模板来搞编译期多态干嘛^-^
pjy717 2006-11-09
  • 打赏
  • 举报
回复
哦,哦,哦(顿悟!),原来作者这里有个假设的味道!!!汗!
“如果要为某个特定类型增加状态信息,只好给策略类增加一个成员类模板,并特化这个成员类模板(在这个特化类里增加静态成员变量,让它携带上与此类型相关的特定信息)”
一语惊醒梦中人!taodm的这句话太重要了!
这里我突然又想到:
静态成员变量也可以放到member function tempalte中呀,作为member function的局部静态变量。用到时通过调用这个member function来返回啊。这里member function template也可以特化呀。这个静态成员变量非要通过member class template来实现吗?
taodm 2006-11-09
  • 打赏
  • 举报
回复
嗯,我再整理一下,确实作者没错,幸好我也还没怎么说错:

借住依赖于自己的模板参数的策略类,可以很容易让策略类携带一些状态信息(可以为某个类型特化策略类,在这个特化类里增加静态成员变量,让它携带上与此类型相关的特定信息)。而在第一种解决方案中,如果要为某个特定类型增加状态信息,只好给策略类增加一个成员类模板,并特化这个成员类模板(在这个特化类里增加静态成员变量,让它携带上与此类型相关的特定信息)。
taodm 2006-11-08
  • 打赏
  • 举报
回复
理解他意思就可以了,细节就别太追究了。
pjy717 2006-11-08
  • 打赏
  • 举报
回复
现在的policy用两种方式实现,一个通过成员函数模板(就是作者所谓的第一种,但是不是成员类模板。),一种是通过类模板。这两个方式都通过trait携带template parameter的状态信息。
但我想这里作者是搞错了一个地方。把成员函数模板跟成员类模板搞混了
pjy717 2006-11-08
  • 打赏
  • 举报
回复
taodm,谢谢你的解答,成员模板包含两种,一种是成员函数模板(member function template),一种是成员类模板(member class template),而作者在这里指第一种方式是用成员类模板。但是我看到的是用成员函数模板。
cime63 2006-11-08
  • 打赏
  • 举报
回复
guiqul@163.com
英文版,李伟柱版

谢谢
taodm 2006-11-08
  • 打赏
  • 举报
回复
呃,15.1.4不就是用了成员模板嘛。
作者的意思是,你可以自己对某个类型特化策略类,那么那个策略类就可以携带信息。但是携带的方法只能是通过给这个特化的策略类增加静态成员变量。
此书还没有需要某个策略类携带信息,所以你没有找到代码。

如果不用模板的模板参数,那么,就只好特化策略类的成员模板了,给这个成员模板的某个特化嵌入一个静态数据变量。

不知你理解没有?
cime63 2006-11-08
  • 打赏
  • 举报
回复
mark
pjy717 2006-11-08
  • 打赏
  • 举报
回复
怎么没人给咱讲讲呀?
pjy717 2006-11-08
  • 打赏
  • 举报
回复
发送完毕,请各位检查一下。
abblly 2006-11-08
  • 打赏
  • 举报
回复
李伟柱版
abblly@126.com
thanks
taodm 2006-11-08
  • 打赏
  • 举报
回复
李伟柱版
pjy717 2006-11-08
  • 打赏
  • 举报
回复
请说明你要哪个版本的
taodm 2006-11-08
  • 打赏
  • 举报
回复
哦,有完全版,不会是扫描的吧。
如果不是扫描的就发我一份taodm@hotmail.com
我就去找书下午来和你讨论。
pjy717 2006-11-08
  • 打赏
  • 举报
回复
候捷太忙了,等到他答复就花儿也凋谢了!
加载更多回复(17)

65,210

社区成员

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

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