C++ が言語レベルで strong typedef をサポートした場合,副次的な恩恵として template の使用による code bloat (コードの膨張)が抑制できるっつーのがあるような気がする.
strong_typedef int hoge; std::vector< int > vi; std::vector< hoge > vh; // コンパイラが hoge が int の strong typedef だという // 知識を持っているので, std::vector< int > と // バイナリを共有できる.構造体によるエミュレートでは // 無理.
で,この恩恵を現行の言語仕様で受けようとするなら,以下のようになるんじゃないでしょ〜かというのがこのエントリで書きたいこと.
#if defined(_DEBUG) STRONG_TYPEDEF( int, hoge ); #else typedef int hoge; #endif std::vector< int > vi; std::vector< hoge > vh;
デバッグビルドでコードの型安全性を検査し(compile-time テストだけでよい,要するにコンパイルできるかどうかのテストだけ),リリースビルドではバイナリが共有できるという……だめぽ?
#コメントで郵便はみがきさんに指摘されているとおり,オーバーロードやテンプレートの特殊化には使えません.だめぽ…….