2012-01-09 9 views
0

私はテンプレートクラス(A)を持っています。クラスTが抽象クラスIClassから派生しているかどうかをどのように確認できますか?テンプレートの引数を確認する

template <class T> 
class A 
{ 
     //T have to be derived from abstract class IClass 
} ; 

感謝テンプレートコンセプトチェックと呼ばれて何をしようとしている

答えて

1

。これらはC++ 11の機能となる予定でしたが、標準化委員会はこれを削減しました。

あなたはまだそれを行うことができますが、そうでなければそうでないほどきれいではありません。ビャーネ・ストロヴストルップは、彼のよくある質問でこれを行う方法について説明しますhttp://www2.research.att.com/~bs/bs_faq2.html#constraints

具体的に、彼はこの例を示します:

template<class T, class B> struct Derived_from { 
    static void constraints(T* p) { B* pb = p; } 
    Derived_from() { void(*p)(T*) = constraints; } 
}; 

それはコンパイラエラーをつまずかますように、そして、あなたは自分のクラスの中で、ダミーの親を宣言します。

template <class T> class A : Derived_from<T,IClass> { ... } 

Stroustrupは、これが継承ではなく変換を実際にテストすると述べています。それが必要な場合は、継承のみをテストする方法があります。静的を使用して

4

はアサートし、ブースト、TR1またはC++ 11からis_base_of

template <class T> 
class A { 
public: 
    BOOST_STATIC_ASSERT((boost::is_base_of<IClass, T>::value)); 
}; 
+0

が、私はそこに知っていたそれをやってより多くのパッケージアップの方法でなければなりませんでした。これを使って。 –

関連する問題