模板参数列表可否为空

graylocus 2014-07-14 05:12:24
如题,很多书上说模板参数列表不可为空,当然,模板就是要做到参数化类型,如果没有类型参数,也即没有使用的意义了,但是有些代码确实能看到template<> 之类的用法
...全文
2299 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyffyt 2014-10-27
  • 打赏
  • 举报
回复
正好在看vector 代码的时候碰到这个
	// TEMPLATE CLASS _Cat_base
template<bool>
	struct _Cat_base
		: false_type
	{	// base class for type predicates
	};

template<>
	struct _Cat_base<true>
		: true_type
	{	// base class for type predicates
	};
unituniverse2 2014-07-14
  • 打赏
  • 举报
回复
定义的时候肯定不行; 使用的时候可以做到类似的效果,通过定义或声明阶段使用全默认值来实现;

template < bool = true > struct A {};
...
A<> o1; /////////////
模板全特化的时候,template后面的空尖括号不能算是空;
www_adintr_com 2014-07-14
  • 打赏
  • 举报
回复
引用 2 楼 graylocus 的回复:
[quote=引用 1 楼 adlay 的回复:] template<> 是在对已有的模板特化的时候吧,不会出现在定义一个新模板的时候
多谢提醒,但是如何判断是先有特化的模板形式,还是先有函数模板或者类模板的形式? 既然语法规定:参数列表不为空,遇见参数列表为空的模板,都会将其视为已定义模板的特化,然后去寻找该定义过的模板,如果该模板没有被定义,是否就会出错?[/quote] 特化的时候后面跟的类名或函数名还有一个模板参数,定义的时候没有。 定义: template <typename T> class XXX { ... } 特化: template <> class XXX<int> { .... } 注意后面那个 <int> 就可以区分了 如果之前没有定义就使用 template <> 肯定会报错
mujiok2003 2014-07-14
  • 打赏
  • 举报
回复
引用
但是有些代码确实能看到template<> 之类的用法
模板特化(specialization)
graylocus 2014-07-14
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
template<> 是在对已有的模板特化的时候吧,不会出现在定义一个新模板的时候
多谢提醒,但是如何判断是先有特化的模板形式,还是先有函数模板或者类模板的形式? 既然语法规定:参数列表不为空,遇见参数列表为空的模板,都会将其视为已定义模板的特化,然后去寻找该定义过的模板,如果该模板没有被定义,是否就会出错?
www_adintr_com 2014-07-14
  • 打赏
  • 举报
回复
template<> 是在对已有的模板特化的时候吧,不会出现在定义一个新模板的时候

64,646

社区成员

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

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