- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将 C++ 与 RTTI 结合使用。我有一个类的 type_info
。如果我只有 type_info
,如何判断另一个类是否是第一个类的子类?
#include <typeinfo>
class Foo { public: virtual ~Foo() {} };
class Boo: public Foo { public: virtual ~Boo() {} };
class Bar { public: virtual ~Bar() {} };
template<class T>
bool instanceOf(const type_info& info) {
// ANSWER COMES HERE!!
}
int main(int argc, const char* argv[]) {
const type_info& fooInfo = typeid(Foo);
const type_info& barInfo = typeid(Bar);
bool booIsFoo = instanceOf<Boo>(fooInfo); // should be true
bool booIsBar = instanceOf<Boo>(barInfo); // should be false
return 0;
}
最佳答案
如果你只有两个typeinfo A和B。没有通用的方法来确定A是否是B的子类。
你可以:
以前的答案。他们要求您以某种方式实例化类型:
type_info
不是正确的工具,如果你绝对想在运行时检查,你应该 dynamic_cast
:
template<class Base, typename Derived>
bool instanceOf(const Derived& object) {
return !dynamic_cast<Base*>(object);
}
您还可以在编译时使用 std::is_base_of
进行检查,如 Steephen 所述(需要 C++11)。
template <typename Base, typename Derived>
static constexpr bool instanceOf() {
return std::is_base_of<Base, Derived>()
}
另一种解决方案:
template <typename Base, typename Derived>
bool instanceOf(const Derived& object) {
try {
throw object;
} catch (const Base&) {
return true;
} catch (...) {
return false;
}
}
关于c++ - 如何使用 type_info 判断一个类型是否是子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306121/
我目前正在学习运行时类型 ID 和强制转换运算符。我有一些疑问,您能帮我解答一下这个疑惑吗? 请参阅以下代码: #include #include using namespace std;
所以,我发现了这个关于 C++ 事件的非常好的教程: http://www.gamedev.net/page/resources/_/technical/game-programming/effect
我正在尝试存储一组对象(全部继承自基础 acorn::Component)。但是,在我的 AddComponent 函数中,我不断收到此错误: 错误 C2280:“type_info::type_in
我从“Inside The C++ Object Model”中读到,type_info 对象通常存储在虚拟表的第一个槽中。但是,我迭代了虚拟表中的成员: class Base { public:
根据 cplusplus.com,std::type_info::before()函数... Returns true if the type precedes the type of rhs in
我知道编译器在实现 std::type_info 函数的行为方面有很大的自由度。 我正在考虑使用它来比较对象类型,所以我想确定: std::type_info::name 必须为两种不同的类型返回两个
当使用typeid(char[10])时,可以获得char[10]的std::type_info。 现在我遇到的问题是,我需要获取 typeid(char[n]),其中 n 不是 constexpr。
我有一个 type_info 对象,它定义了属性映射中的属性类型。我想运行一些代码(例如从 cin 中读取值),该代码使用我的 type_info 对象定义的类型进行参数化。它可以是一些模板函数,即:
考虑以下方法 static ComponentType & getTypeFor(const type_info &t){ ComponentType * type = compone
有没有办法从两个 const ::std::type_info 中判断对象,让我们将它们命名为B和 D如果 D 描述的类型是从类型 B 派生的? 我问是因为我想删除我得到的对象的类型,但稍后能够检查它
为什么下面的例子: #include #include template void fun(const T& param) { std::cout << "T = " << typ
这个问题在这里已经有了答案: Is it possible to print a variable's type in standard C++? (25 个答案) 关闭 2 年前。 我用g++编译
我存储了一个指向 type_info 对象的指针。 int MyVariable = 123; const std::type_info* Datatype = &typeid(MyVariable)
我正在微优化 code for identifying object types .我假设我可以使用以下方法检查在同一模块中实例化的两个对象是否具有相同的类型: SomeCommonBase& fir
我将 C++ 与 RTTI 结合使用。我有一个类的 type_info。如果我只有 type_info,如何判断另一个类是否是第一个类的子类? #include class Foo
我有一棵树,其中每个节点基本上是这样的: struct node { std::unordered_set objects; std::map children; }; 当我遍历树以添
可以定义一个 constexpr std::type_info 上的指针任何类的对象 T .该语言是否允许在编译时比较此类指针的相等性? 例如: #include template inline
我有以下最小示例代码。我希望能够在我的 Application::HandleEvent 中确定派生类方法。 Application 类最终将包含一个 map哪些 map type_info到处理程序
有没有办法在 C++ 中使用 const std::type_info& 作为模板参数? 例如 template class A { public: A(){} const std:
我有一组多态 C++ 类,它们都由同一个模块 (Windows DLL) 实例化。现在有两个指向此类的指针并调用了 typeid: SomeCommonBase* first = ...; //val
我是一名优秀的程序员,十分优秀!