Visualization Tool Kit(VTK)など

通常のassertは実行時に変数の妥当性を判断するものである。すなわち動的なデータをチェックする一方で、その関数が呼ばれなければ当然チェックをすることができない。
テンプレート引数が想定されたものであるかや定数が想定されたものであるかをコンパイル時にチェックすることができる。
すなわち、インスタンス化される関数は呼び出しに関わらずチェックされる。

例えば、前者の場合は呼び出しはどこかでされていても、その関数が呼ばれるかどうかは実行中の操作に依存する。そのため、網羅的なテストコードを作成するなどの作業が必要である。
一方、後者ではどこかにその関数の呼び出しがあれば、テンプレートはインスタンス化されるため、その時にstatic_assertによるチェックが行われる。
すなわちプリプロセッサによるチェックよりも動的でありassertによるチェックよりも静的と言える。



  template<typename T, size_t N>
  void func( std::array<T, N>& data)
  {
    static_assert( N != 16, "data is not matrix array" ); // Nが16でなければ実行中の呼び出し時ではなくコンパイル時にエラーとなる。
    assert( N !=16 ); //実行時に判断される。この関数が呼ばれないと機能しない。
  }

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます