STL-宏与STL

乔55 / 2023-05-14 / 原文

1. // 宏是在预处理阶段对代码进行纯文本替换
2. // 宏本身没有函数的语义,不会对数据类型进行检查
3. // 因此借助参数宏可以摆脱数据类型的约束和限制,但同时失去对数据类型的检查
4. // C++定义参数实现一个通用的模板功能

#define MAX(T) T max_##T(T x, T y){ return x > y ? x : y; }
MAX(int)
MAX(float)
MAX(double) 
MAX(string)
#define Max(T) max_##T

void test()
{
    int a = 10;
    int b = 20;
    cout << Max(int)(a, b) << endl;
    string x = "hello";
    string y = "world";
    cout << Max(string)(x, y) << endl;
    char cx[20] = "hello";
    char cy[20] = "world";
    cout << Max(string)(cx, cy) << endl;
}