my previous question static_assertを使用して、テンプレートパラメータを特定のサブタイプに制限したかったのです。質問は次のように答えました:C++ 11 static_assert:パラメータ化されたエラーメッセージ
template <typename T>
struct X {
static_assert(std::is_base_of<Y,T>::value,"T must be derived from Y!");
};
ここで、エラーメッセージをより簡潔にしたいと思います。つまり、どのタイプがこの制約に違反しているのかを述べたいと思います。たとえば、クラスA
がY
から派生しておらず、誰かがX<A>
を迎えた場合、エラーメッセージに「タイプパラメータはYから導かれている必要がありますが、Aはありません」というメッセージが表示されます。
これは標準ライブラリでも何とか達成できますか? Tがインスタンス化で使用された型の名前を取得
- 組み立てた文字列コンパイル時:
は、私は2つの課題を参照してください。その名前は意味のあるものでなければなりません。理想的には違反の定義に使用されているものと同じです。私はtypeid(T).name()を試しましたが、受け入れられない難解な名前しか返しません。私は何かの名前を返すマクロがあることを覚えていますが、私はもうそれを思い出すことはできません。
関連(perapsもだます):http://stackoverflow.com/q/6415186/34509 –