《程序员》第8期中《在C++中计算对象个数》一文的疑问?

kueixing 2001-08-28 05:26:58
文中有一段代码:
template<typename T>
class Counter{
public:
Counter(){++count;}
Counter(const Counter&){++count;}
~Count(){--count;}
static size_t howmany()
{return count;}
private:
static size_t count;
};
template<typename T>
size_t
Counter<T>::count=0;
实现部分:
classs Widget{
public:
......
static size_t howmany();
{return Counter<Widget>::howmany();}
private:
....
Counter<Widget> c;
};
1)他用的模板声明为什么是template<typename T>而不是template<class T>?
2)在Counter类中为什么没出现T
3)template<typename T>
size_t是什么意思?
4)Counter<Widget>怎么实现?
...全文
60 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofark 2001-08-28
  • 打赏
  • 举报
回复
谢谢xwu(蛮牛)的指导。Thinking in C++ Volumn 2 的 3: Templates in depth里面讲得很清楚。
xwu 2001-08-28
  • 打赏
  • 举报
回复
1)typename 是新的C++标准里的关键字, 作用和class 一样。 typename 的引入是因为
在某些特别的情况下, class表达的意思不清, 编译器不能编译。 Thinking in C++ Volumn 2 有
介绍。
3)size_t 就是unsigned int, 定义在stddef.h 里。
kingofark 2001-08-28
  • 打赏
  • 举报
回复
关于1)他用的模板声明为什么是template<typename T>而不是template<class T>?
我以前也没见过,猜想是基于generic programming的考虑。

关于4)Counter<Widget>怎么实现?
这就没什么可说的了。好好学习template的知识,然后...该怎么实现就怎么实现,没什么奥妙丫。

你的第2和第4个问题应该是由于没有完全理解template而同时出现的。
kingofark 2001-08-28
  • 打赏
  • 举报
回复
顺便说一句,这篇文章太棒了!希望大家多多讨论。
kingofark 2001-08-28
  • 打赏
  • 举报
回复
关于:2)在Counter类中为什么没出现T
注意这段代码前面作者说过,“需要为每一个使用Counter的class准备一个”。而以前代码中的静态对象count使得“对于所有使用Counter的class,只有一个count”,没办法记录某一个class的对象个数。
让Counter变成一个template,仅仅只是让其认为 Counter 是 class T 自己专有的;实际上并不需要template中的T去参与Counter的什么事。
不知道我说清楚没有。你自己再好好理解理解,因为整个问题的关键就在这里。
那位大虾能比我讲得更清楚的,快来帮忙。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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