d*******n 发帖数: 524 | 1 对typename这个关键词的用法非常不理解,下面这段代码里面划下划线的地方是否需要
typename?为什么?谢谢
class NotEnoughElements {};
template
typename Container::value_type
Reduce(const Container& c, Function fn) throw (NotEnoughElements)
{
if(c.size() < 2)
throw NotEnoughElements();
______ Container::value_type result = *c.begin();
for(______ Container::iterator it = c.begin()+1; it < c.end(); it
++)
{
result = fn(result, *it);
}
|
f*******y 发帖数: 988 | 2 要用的
一般是个type就都敲上比较保险
【在 d*******n 的大作中提到】 : 对typename这个关键词的用法非常不理解,下面这段代码里面划下划线的地方是否需要 : typename?为什么?谢谢 : class NotEnoughElements {}; : template : typename Container::value_type : Reduce(const Container& c, Function fn) throw (NotEnoughElements) : { : if(c.size() < 2) : throw NotEnoughElements(); : ______ Container::value_type result = *c.begin();
|
d*******n 发帖数: 524 | 3 我对这个typename的用法非常不清楚,大牛可不可以给科普一下什么时候该用什么时候
不该用?
或者给个链接讲这个问题讲的比较清楚的?
谢谢了
【在 f*******y 的大作中提到】 : 要用的 : 一般是个type就都敲上比较保险
|
f*******y 发帖数: 988 | 4 就是你模仿编译器想想,你知道Container::value_type是个类型么?
不知道吧,那你加上就对了
【在 d*******n 的大作中提到】 : 我对这个typename的用法非常不清楚,大牛可不可以给科普一下什么时候该用什么时候 : 不该用? : 或者给个链接讲这个问题讲的比较清楚的? : 谢谢了
|
d***q 发帖数: 1119 | 5 whey you want to use it as a type let compiler know it is a type.
for example
you define
class XX
{
public:
typedef in Int;
};
when you try to use the type to define some variables like:
XX::Int xx; compiler will consider that XX::Int is a static variable.
you must tell compiler XX::Int is a type so you need to write:
typename XX::Int xx; |
d***q 发帖数: 1119 | 6 when you want to use it as a type you must tell compiler it is a type.
the typename is used for that.
for example
class XX
{
public:
typedef int Int;
};
when you want to use Int to defines some variables, you probably will write
like: XX::Int xx; however compiler will complain XX::Int is not a type
instead a static variable. In order to inform compiler it is a type, put
typename ahead like: typename XX::Int xx; |