1. C++ 为静态类型语言
- 虽然类型安全(可以指定类型)由于数据类型的不一致,把近乎相同的函数写了三遍
2. 宏可以摆脱数据类型的限制
-
蓝色部分就是预编译时做的纯文本替换,但cx和cy代表的是数组首元素的地址, 而不是比较“world” 和 “hello”首字母的assic值
-
结合上面两个程序的优点, 搞一个类型安全,代码通用的函数框架
3. 利用宏构建通用函数框架
其实本质就是利用宏让与编译器来实现一些函数, 而不用手动去写
#include <iostream>
using namespace std;
// 可以把##理解为前后连接在一起
#define MAX(T) T max_##T(T x, T y){\
return x > y ? x : y;\
}
// 下面的在预编译时都会转为相应的函数
MAX(int)
// int max_int(int x, int y){ return x > y ? x : y;}
MAX(double)
// double max_double(double x, double y){ return x > y ? x : y;}
MAX(string)
// string max_string(string x, string y){ return x > y ? x : y;}
// 但如果直接在代码中去用 max_int(a, b) 并不直观, 因为程序中看不到max_int, 是由编译器完成的
// 所以这里又加了一个宏,Max(int)(a, b) 相当于 max_int(a, b)
#define Max(T) max_##T
int main(){
int nx = 10, ny = 20;
cout << Max(int)(nx, ny) << endl;
double dx = 1.1, dy = 2.2;
cout << Max(double)(dx, dy) << endl;
string sx="world", sy="hello";
cout << Max(string)(sx, sy) << endl;
// char* 是可以给string传参的
char cx[256]="world", cy[256]="hello";
cout << Max(string)(cx, cy) << endl;
return 0;
}