Chinaunix
标题:
C++ template 语法
[打印本页]
作者:
ryuken2000
时间:
2007-12-09 15:06
标题:
C++ template 语法
最近在看C++代码的时候,发现了如下一个模板类的声明:
template <class Key, class T, class Compare = std::less<Key>, template <class> class Alloc = std::Allocator>
class MyMap : protected std::map<Key, T, Compare, Alloc> {
......
};
对于这个模板类的第四个参数,template <class> class Alloc = std::Allocator,这种写法还是第一次遇到,不太明白其中的含义,是否这种写法强调class Alloc也必须是一个模板类呢?如果不这么写,而简单的写class Alloc = std::Allocator应该也没有什么问题吧?
请高手解答。
[
本帖最后由 ryuken2000 于 2007-12-9 15:09 编辑
]
作者:
vincol
时间:
2007-12-09 19:00
不是什么强调,因为std::allocator本身就要有模板参数,他和前面的key,T不一样,Alloc是一个“指代模板类的参数”! 应该是语法需要吧!
举个例子:
template<class T>
class CA {};
template<class T>
class CB {};
你可以这样用:CB cb<int>;
但是这样是错的: CB cb<CA>;因为CA和int不通,CA要有模板参数。
要把CB的模板参数改成:
template< template<class> class T>
class CB {};
才能用CB cb<CA>
[
本帖最后由 vincol 于 2007-12-10 13:28 编辑
]
作者:
doctorjxd
时间:
2007-12-09 19:24
template parameter 和 template template parameter 是不一样的。
作者:
飞灰橙
时间:
2007-12-09 19:29
奇怪,我记得这个编译不过吧
楼主用什么编译器?
作者:
converse
时间:
2007-12-09 21:18
模板玩的不多,这个是模板默认参数,类似于函数默认参数.
作者:
xiaomiao
时间:
2007-12-10 16:37
提示:
作者被禁止或删除 内容自动屏蔽
作者:
FightingWu
时间:
2007-12-23 21:45
emplate <class Key, class T, class Compare = std::less<Key>, template <class> class Alloc = std::Allocator>
属于类模板中有模板参数的情况。其中的class T 中的class不能被typename代替。
由于用不到“模板的模板参数的”模板参数,故省略为template<class>.
在类里可以定义如Alloc<T> oneobject,要是去掉template<class>,直接写成class Allocl=std::Allocator,显然就不行了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2