问题标签 [typeid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6805 浏览

c++ - 多态指针的typeid?

我不明白为什么指针不是多态类型,因为我们可以使用指向派生类的基类指针来调用派生类的虚函数。这表明在运行时,系统可以确定指针是否是多态的,不是吗?

(这是typeid for polymorphic types的后续问题)

0 投票
1 回答
9661 浏览

c++ - 在 C++11 中检查对象类型

我有从 A 继承的 B 类。

我有三个对象。

我想检查a是否是A类型的对象,a2是B类型的对象(不是A),b是B类型的对象。

我试过打字比较,但它没有给我正确的答案。

我尝试了动态转换,但出现编译错误。

我使用了静态转换,但我得到了错误的答案。

如何正确识别C++11中的对象类型?

0 投票
2 回答
754 浏览

c++ - 在 C++ 中利用 RTTI 的实际用途

完成第一卷。在 Bruce Eckel 的 Thinking in C++ 中,我已经开始阅读第 2 卷。专门讨论RTTI(运行时类型识别)的那一章最让我吃惊。我一直在阅读关于tyepid,dynamic_cast等的内容。

但是,我有一个问题浮现在我的脑海中。他们是否有任何通过上述运营商进行开发的实际用途,RTTI即来自现实项目的一些例子?此外,遇到哪些限制使其需要使用?

0 投票
1 回答
188 浏览

c++ - 重载函数候选匹配问题

我不确定我是否理解这里发生的事情的细微差别,并希望得到解释。

我正在从模板包装器中调用几个重载函数,lapack_gesvd_nothrow. 从那里,我打电话给像这样的个人 fxns:

它一直有效,直到我声明了第二种类型的重载(我用 float 和 double 重载,没问题),但现在它抛出了一些错误,似乎没有很好地计算我的论点。

我从一个函数调用它,该函数将参数设为:

我实际上只在reinterpret_casts两者之间做。

这是它显然正在寻找的fxn:

以下是候选匹配:

我很困惑为什么现在出现取消引用,当它似乎没有它是必需的error: invalid conversion from 'int' to 'int*',并且在最近的重载之前是必需的。

您的解释和解决方案将不胜感激!谢谢!

编辑

它可能归结为:

如果我打电话lapack_gesvd_nothrow<float, float>(...)然后执行 typeid 比较if (typeid(DType) == typeid(CType))......我会得到预期的答案吗?现在看来,并非如此。如何正确检查模板类型以进行此比较?

0 投票
1 回答
702 浏览

c++ - C++ 强制转换和 typeid

我有一个有两个基类指针的函数,根据子类,应该调用其他函数......

像这样:

但是,有一大堆问题:

1)我读过 typeid.name 会根据编译器产生不同的结果,因此我不想使用它。

2)我考虑过创建一个“B”的实例而不是编写if(typeid(*a2) == typeid(instanceOfB)),但这将是很多工作,因为有很多构造函数参数......

3)我也考虑过使用 dynamic_cast 但一些子类看起来像这样:

因此,如果我想通过动态转换检查参数是否为 B,即使参数实际上是 C,它也会通过,因为 C 继承自 B

编辑:看来我必须重新考虑设计,但由于许多人表示设计存在缺陷,我将快速解释我的思路:

有一扇窗户。几个不同的对象位于窗口内并四处移动,一个游戏。该功能应该用作碰撞检测。像这样:遍历屏幕上的所有对象,检查是否发生碰撞。将两个碰撞的对象作为参数并调用此函数。此函数查找不同的碰撞,例如“如果 a 是“箭头”而 a2 是“强盗”,则执行一些操作,但如果 a2 是“树”,则改为执行此操作!

0 投票
3 回答
5648 浏览

c++ - Typeid 无法正常工作

我无法正确获取 typeid 函数。我错过了什么吗

代码:

它总是打印:

B 类 A 类 A 类

我正在为我的项目使用 VS2010

0 投票
2 回答
2874 浏览

c++ - c++filt 不会对 typeid 名称进行分解

我在 GCC C++编译器上运行代码,以输出 type_info::name:

但我得到以下结果:

并在拆解时,

我得到与之前相同的输出。还有其他解决方案吗?

0 投票
2 回答
681 浏览

c++ - 尝试在模板 C++ 中返回变量时出错

所以我试图在 Windows 中获取剪贴板的内容,因为它可以是任何类型,我使用模板来获取它,但是在尝试构建时,Visual Studio 2013 RC 发送此错误:

继承人的代码:

提前致谢。

0 投票
0 回答
159 浏览

templates - typeid 作为 VS2012 中的专门模板参数导致代码分析失败

我有一个将类与数据库结合的遗留 ORM,它在 VS2008 和 VS2012 下编译得很好。我尝试使用 VS2012 代码分析的功能,它给了我编译错误 C2975 和 C2440。我已经提取了相关代码以帮助隔离问题:

对于每个 template<> 行,我得到以下一对错误:

看来编译器将 typeid<...> 视为模板的 int 参数。TYPEOF() 宏用于声明与宏参数类型相同的新变量。这个宏嵌入在其他宏中,我愿意接受替代/更好的方法来做到这一点。它按原样工作,但 VS2012 的代码分析功能阻塞,我不知道为什么。

任何帮助表示赞赏。谢谢。

0 投票
2 回答
398 浏览

c++ - type_info 的包装类

所以,我发现了这个关于 C++ 事件的非常好的教程:

http://www.gamedev.net/page/resources/_/technical/game-programming/effective-event-handling-in-c-r2459

但是:创建者对 typeid 返回的 type_info 使用包装器。据我了解,由于 type_info 的 = 运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,我将如何解决这个问题,我应该简单地使用 type_info.hash_code - 这是否可以单独识别一个类?还是我不明白他在这种情况下所说的“包装器”是什么意思?