20

カスタムエラーメッセージを使用して、C++コードでコンパイル時エラーを作成したいと思います。私はいくつかの理由でこれをやりたいです:

  • まだ実装されていない新機能に取り組んでいる間、コンパイルを強制的に失敗させます。(コンパイル時!TODOリマインダー)
  • サポートされていないテンプレートの特殊化を実装しようとしたときに、より読みやすいエラーを作成します。

これを行うにはトリックがあると確信していますが、方法を説明するリソースが見つかりません。コードをCOMPILE_FAIL( "エラーメッセージ");の形式の#defineでラップします。

ありがとう

4

3 に答える 3

41

使用#error

#error "YOUR MESSAGE"

これにより、プリプロセッサからエラーが発生します。後の段階(テンプレート処理中など)でエラーを検出する場合は、static_assert(C ++ 11機能)を使用します。

于 2013-01-31T19:53:47.213 に答える
25

を調べstatic_assertます。

例:

#include <iostream>
#include <type_traits>

template<typename T>
class matrix {
    static_assert(std::is_integral<T>::value, "Can only be integral type");
};

int main() {
    matrix<int*> v; //error: static assertion failed: Can only be integral type
}
于 2013-01-31T20:01:44.297 に答える
5

コンパイラエラー(GCC、Clangスタイル)を強制するには:

#error "You ain't finished this yet!"
于 2013-01-31T19:53:56.477 に答える