マクロ関数よりもテンプレート関数

http://www.geocities.jp/ky_webid/cpp/language/026.html

テンプレート関数とインライン関数を組み合わせれば、マクロ関数よりも安全な関数を定義することができます。

#include <iostream>

// マクロでのmax関数
#define MACRO_MAX(a,b) ((a)>(b)?(a):(b))

// テンプレート&インラインでのmax関数
template <class T> inline T template_max(const T& a,const T& b) {
    return a > b ? a : b;
}

int main() {
    int i = 100;
    int j = 200;
    
    std::cout << template_max(i,j) << std::endl;
    std::cout << MACRO_MAX(i,j) << std::endl;
    
    return 0;
}

何が嬉しいって、やっぱりC++の普通の関数として定義できるのが嬉しいですね。

マクロの場合は基本一行で書かないといけなかったり色々と面倒です。

またマクロはそのまま値を展開するだけなのでインクリメントしてる変数を渡すとおかしくなったりします。

// これはダメ!
MACRO_MAX(i++,j);

// これは大丈夫
template_max(i++,j);

この辺のマクロバッドノウハウのことを意識しなくても良くなるだけでもテンプレート&インラインを使った方が安善にプログラムできますね。