2011-05-05 62 views
4

我想知道,是否有任何優雅的方式(如this)檢查模板參數是否是從給定的類派生的? 一般來說:如何驗證模板類是在編譯時從給定的類派生的?

template<class A, class B> 
class MyClass 
{ 
    // shold give the compilation error if B is not derived from A 
    // but should work if B inherits from A as private 
} 

當B從A繼承公衆在另一個question提供的解決方案僅適用:

class B: public A 
然而

,我寧可不要這樣的限制:

class A{}; 
class B : public A{}; 
class C : private A{}; 
class D; 
MyClass<A,B> // works now 
MyClass<A,C> // should be OK 
MyClass<A,D> // only here I need a compile error 

在此先感謝!

回答

1

從任何私有繼承是一個實現細節。

在重構和代碼分析期間,如果這樣的檢測對於外部功能是不可能的,我會更加高興......

相關問題