HM169 推导一致才能用模板

HM169 推导一致才能用模板

HM169 推导一致才能用模板

来源: 第 169 集 模板-函数模板注意事项

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

函数模板有两点必须守住:

  1. 自动类型推导时,推出来的 \(T\) 必须一致。 例如 mySwap 的两个形参都是 T&。两个 int 可以交换;一个 int 和一个 char 推不出同一个 \(T\),不能调用。
  2. 模板必须先确定 \(T\) 的类型才能用。 即使函数体里完全没用到 \(T\),也不能写成 func();只能显式指定,例如 func<int>()。自动推导在这里帮不上忙,因为没有实参可供推导。

typenameclass 在模板参数里等价,两种写法都可以。

请实现:

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
通过率
?
上传者