在 C++ 中比较 class 类型
Compare class types in C++
我需要比较两个 class,更准确地说是它们的类型。
我写了下面的代码:
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
仅适用于 class 的实例。我希望你知道一个解决方案。
我相信您正在寻找 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();
}
我需要比较两个 class,更准确地说是它们的类型。 我写了下面的代码:
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
仅适用于 class 的实例。我希望你知道一个解决方案。
我相信您正在寻找 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();
}