C++ 比较C+中的类类型+;

C++ 比较C+中的类类型+;,c++,casting,compare,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

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

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();
}
类基{};
派生类:公共基{};
类引擎
{
公众:
模板
T addComponent();
};
模板
T引擎::addComponent()
{
基础*isRight=动态施法(T);
如果(!isRight)
抛出(“错误!”);
返回T();
}
然后我叫它

int main()
{
    Engine engine = Engine();
    Derived derived = engine.addComponent<Derived>();
}
intmain()
{
发动机=发动机();
派生=engine.addComponent();
}

我知道,
dynamic\u cast
只对类的实例有效。我希望你知道一个解决办法。

我相信你在寻找。由于它是静态的,所以可以在编译时完全执行此检查:

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

    return T();
}
模板
T引擎::addComponent()
{
静态_断言(std::is_base_of::value,“T不从base派生!”);
返回T();
}

我相信您正在寻找。由于它是静态的,所以可以在编译时完全执行此检查:

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

    return T();
}
模板
T引擎::addComponent()
{
静态_断言(std::is_base_of::value,“T不从base派生!”);
返回T();
}

不清楚您想做什么,但您可能想看看。此外,抛出字符串文字是一个糟糕的想法。不清楚您想做什么,但您可能想看看。此外,抛出字符串文字是一个糟糕的想法。