第4回はstatic_assertです。(正直もっと後で良かった気もする) まずは以下のプログラムを見てください。 1: #include <string> 2: 3: using namespace std; 4: 5: //テンプレートを使用した2次元上の点の構造体 6: template<typename T> 7: struct Point 8: { 9: T x, y; 10: }; 11: 12: int main() 13: { 14: //数値を扱う型で生成 15: Point<int> pos1; 16: Point<float> pos2; 17: 18: //文字を扱う型で生成(座標を文字で・・・?) 19: Point<char*> pos3; 20: Point<string> pos4; 21: 22: return 0; 23: } 構造体を利用する時に、複数の型で生成できるようにテンプレートを使用するということはよくあります。 1: template<typename T> 2: struct Point 3: { 4: T x, y; 5: Point() 6: { 7: assert(sizeof(x) != sizeof(char*)); 8: assert(sizeof(x) != sizeof(string)); 9: } 10: }; assertでやったことがないのでよく分からないですが、多分こんな感じになります。 1: template<typename T> 2: struct Point 3: { 4: static_assert(is_arithmetic<T>::value, "T is arithmetic!"); 5: T x, y; 6: }; これで最初のプログラムをビルドするとエラー出力として T is arithmetic! と自分で書いた文章が出てきます。 static_assertを使わなくとも、プログラムを作ることに問題はありませんが、もしこれから先、安全性の高いコードを作るという場合があったら使うようにしてください。 以上でstatic_assertの説明を終わります。 |