我有一個模板類(A)。我如何檢查T類是否從抽象類IClass派生?檢查模板參數
template <class T>
class A
{
//T have to be derived from abstract class IClass
} ;
感謝
我有一個模板類(A)。我如何檢查T類是否從抽象類IClass派生?檢查模板參數
template <class T>
class A
{
//T have to be derived from abstract class IClass
} ;
感謝
你想要做的是爲模板的概念檢查引用。這些將成爲C++ 11的一個功能,但標準委員會將其裁掉。
儘管如此,它仍然可以做到,但它並不像其他方式那樣乾淨。 Bjarne的Stroustrup的解釋如何做到這一點在他的FAQ: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提到,這實際上是測試轉換,而不是繼承。如果這是你需要的,可能只有專門測試繼承的方法。
使用靜態斷言和升壓,TR1或C++ 11 is_base_of
:
template <class T>
class A {
public:
BOOST_STATIC_ASSERT((boost::is_base_of<IClass, T>::value));
};
我知道必須有這樣做的更打包式的方式。用這個。 – 2012-01-09 21:50:26