2015-02-09 59 views
1

我需要比較兩個類,更確切地說是它們的類型。 我寫了下面的代碼:比較C++中的類類型

class Base {}; 
class Derived : public Base {}; 

class Engine 
{ 
public: 
    template <class T> 
    T addComponent(); 
}; 

template <class T> 
T Engine::addComponent() 
{ 
    Base* isRight = dynamic_cast<Base*>(T); 
    if (!isRight) 
     throw("Error!"); 

    return T(); 
} 

然後,我把它叫做

int main() 
{ 
    Engine engine = Engine(); 
    Derived derived = engine.addComponent<Derived>(); 
} 

嗯,我知道,只有在類的實例dynamic_cast作品。我希望你知道一個解決方案。

+1

目前還不清楚你想要做什麼,但你可能想看看['std :: is_same'](http://en.cppreference.com/w/cpp/types/is_same)。 – juanchopanza 2015-02-09 21:05:08

+3

另外,拋出一個字符串文字是一個_terrible_想法。 – 2015-02-09 21:06:13

回答

9

我相信你正在尋找std::is_base_of。由於這是一個靜態的東西,你可以在編譯時完成這個檢查:

template <class T> 
T Engine::addComponent() 
{ 
    static_assert(std::is_base_of<Base, T>::value, "T doesn't derive from Base!"); 

    return T(); 
}