练习16.53
编写你自己版本的print函数,并打印一个、两个及五个实参来测试它,要打印的每个实参都应有不同的类型。
解答:
#include <string>
#include <iostream>
using namespace std;
template <typename T>
ostream &print(ostream &os, const T &t){
return os << t;
}
template <typename T, typename... Args>
ostream &print(ostream &os, const T &t, const Args& ... rset){
os << t << ", ";
return print(os, rset...);
}
int main(){
int i = 0;
float f = 9.2f;
char ch = 'a';
double d = 3.14;
string s = "hello";
print(cout, d, i);
cout << endl;
print(cout, i, s, 42);
cout << endl;
print(cout, s, ch, 3, f, d);
cout << endl;
}
练习16.54
如果我们对一个没有<<运算符的类型调用print,会发生什么?
解答:
这里编译无法通过,找不到对应的操作符。
练习16.55
如果我们的可变参数版本print的定义之后声明非可变参数版本,解释可变参数的版本会如何执行。
解答:
会正常运行,根据WARNING中的提示,非可变参版本的声明只要在作用域中就可以了。