#include <iostream> using namespace std;
#define MAX(T) max_##T(T x, T y){return x < y ? y : x;} MAX(int) MAX(double) MAX(string) #define max(T) max_##T int main (void) { cout << max(int)(1, 2) << endl; cout << max(double)(1.2, 3.4) << endl; cout << max(string)("hello", "world") << endl; return 0; }
优点:减少代码编辑量,同时实现了类似模板的类型无关形式编程。
缺点:添加新类型调用时都需要手动添加其定义即MAX(T)
对于返回值有限制,宏不是函数,本身只做文本替换,宏执行得到的结果是没有安全性检查的。MAX(T)展开并没有返回类型指定。