VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1309|回复: 11

问一个模板的基本问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-7 23:40:01 | 显示全部楼层 |阅读模式
1、template<class _tt>
    class ……
2、template<Type _tt>
    class……
请问以上两种用法中,类型的定义分别使用了class 和Type,请问这有什么区别吗?
回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-8 23:27:01 | 显示全部楼层
在使用中没有区别

回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-9 01:18:01 | 显示全部楼层
我记得可以用class和typename,type以前没见过
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-9 12:09:02 | 显示全部楼层
其实 Type 只要一个#define Type typename
回复

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-9 12:36:01 | 显示全部楼层
没区别啊,个人习惯而已
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-9 14:09:01 | 显示全部楼层
用class会产生理解偏差,会认为模板使用的类型仅限与类,其是原子类型如int也可以用的。
typename风格更好!
回复

使用道具 举报

1

主题

19

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-10 09:36:01 | 显示全部楼层
同意楼上,

这两个在作用上是一样的
回复

使用道具 举报

1

主题

19

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-10 11:09:02 | 显示全部楼层
同意楼上,

这两个在作用上是一样的
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-10 22:09:01 | 显示全部楼层
typename具有双重意义,在楼主所说的那种用法重二者没有区别,但是如
template<typename C>
void print2nd(const C& container)
{
    if(container.size() >= 2) {
        typename C::const_iterator iter(container.begin());//这里一定要,而只能加
                                                           //typename
        ........
    }
}
原因是在任何时候你想要在template中指涉一个嵌套从属类型名称,就必须在紧临它的前一个位置放上typename,具体内容请参考effective c++ 条款42
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-17 23:27:01 | 显示全部楼层
先谢谢各位。

可不可以给一个typename 指定的类型指定一个默认值,如何做呢?
是不是这样
template<typename _type = string>
     class………………
瞎想的,◎请高手指点~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表