比较C++中的类类型

Nor*_*cht 1 c++ casting compare

我需要比较两个类,更确切地说是它们的类型.我写了以下代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

然后我称之为

int main()
{
    Engine engine = Engine();
    Derived derived = engine.addComponent<Derived>();
}
Run Code Online (Sandbox Code Playgroud)

嗯,我知道,dynamic_cast只适用于班级的实例.我希望你知道一个解决方案.

Moo*_*uck 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();
}
Run Code Online (Sandbox Code Playgroud)