HM169 推导一致才能用模板
HM169 推导一致才能用模板
来源: 第 169 集 模板-函数模板注意事项
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
函数模板有两点必须守住:
- 自动类型推导时,推出来的 \(T\) 必须一致。 例如
mySwap的两个形参都是T&。两个int可以交换;一个int和一个char推不出同一个 \(T\),不能调用。 - 模板必须先确定 \(T\) 的类型才能用。 即使函数体里完全没用到 \(T\),也不能写成
func();只能显式指定,例如func<int>()。自动推导在这里帮不上忙,因为没有实参可供推导。
typename 与 class 在模板参数里等价,两种写法都可以。
请实现:
template<class T>
void mySwap(T &a, T &b);
template<class T>
void func();
mySwap 用临时变量交换两个引用。func 一旦被合法调用,输出一行 FUNC的调用。
处理 \(q\) 次操作:
1 t1 v1 t2 v2:试图用自动推导交换。\(t=0\) 表示整数,\(t=1\) 表示字符(值为一个字母)。类型一致则交换并输出两个值(整数原样,字符输出该字母);不一致则输出无法推导出一致的T。2:试图不指定类型调用func(),输出模板必须确定T的类型。3 t:显式指定类型后调用func(\(t\) 只用来确定 \(T\),函数体不用它),输出FUNC的调用。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,格式如题目描述。整数绝对值不超过 \(10^9\)。字符保证是单个小写或大写字母。
输出格式
每个操作一行,行末换行。交换成功时两个值之间一个空格。
样例
输入 #1
6
1 0 10 0 20
1 0 10 1 c
2
3 0
1 1 a 1 z
3 1
输出 #1
20 10
无法推导出一致的T
模板必须确定T的类型
FUNC的调用
z a
FUNC的调用
输入 #2
2
1 0 5 1 a
2
输出 #2
无法推导出一致的T
模板必须确定T的类型
说明
- 第一个注意点:自动推导必须推出同一个 \(T\)。
- 第二个注意点:没有实参时只能显式指定类型,对应「模板不能直接使用」。
func的函数体可以不出现 \(T\),但调用时仍要给出 \(T\)。
信息
- ID
- 1168
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者