16.1
#include <iostream>
using namespace std;
template <typename T>
T myabs(T v) {
return abs(v);
}
int main() {
printf("%d\t", abs(-1));
printf("%d\t", abs(-1l));
printf("%d\t", abs(-'a'));
return 0;
}
16.2
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
template <typename T>
void mywrite(ostream& o, T v) {
o << v << endl;
}
int main() {
mywrite(cout, "abc");
mywrite(cout, 123);
mywrite(cout, 'c');
mywrite(cout, 3.2e3);
ofstream out("C:\\Users\\Administrator\\CLionProjects\\DS_A\\hehe.txt");
mywrite(cout, "abc");
mywrite(cout, 123);
mywrite(cout, 'c');
mywrite(cout, 3.2e3);
out.close();
stringstream ss;
mywrite(ss, "abc");
mywrite(ss, 123);
mywrite(ss, 'c');
mywrite(ss, 3.2e3);
out.close();
return 0;
}
16.3
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
template <typename T1, typename T2>
int compare(T1 v, T2 w) {
if(v < w)
return -1;
else if(v > w)
return 1;
else
return 0;
}
int main() {
printf("%p\t%p\n", "hi", "world");
printf("%d\n", compare("hi", "world"));
printf("%d\n", compare(string("hi"), string("world")));
return 0;
}
可以看出,后者是比较字符串字面值,前者是比较两个指针大小。