问题标签 [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.
c++ - 多态指针的typeid?
我不明白为什么指针不是多态类型,因为我们可以使用指向派生类的基类指针来调用派生类的虚函数。这表明在运行时,系统可以确定指针是否是多态的,不是吗?
c++ - 在 C++11 中检查对象类型
我有从 A 继承的 B 类。
我有三个对象。
我想检查a是否是A类型的对象,a2是B类型的对象(不是A),b是B类型的对象。
我试过打字比较,但它没有给我正确的答案。
我尝试了动态转换,但出现编译错误。
我使用了静态转换,但我得到了错误的答案。
如何正确识别C++11中的对象类型?
c++ - 在 C++ 中利用 RTTI 的实际用途
完成第一卷。在 Bruce Eckel 的 Thinking in C++ 中,我已经开始阅读第 2 卷。专门讨论RTTI
(运行时类型识别)的那一章最让我吃惊。我一直在阅读关于tyepid
,dynamic_cast
等的内容。
但是,我有一个问题浮现在我的脑海中。他们是否有任何通过上述运营商进行开发的实际用途,RTTI
即来自现实项目的一些例子?此外,遇到哪些限制使其需要使用?
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))
......我会得到预期的答案吗?现在看来,并非如此。如何正确检查模板类型以进行此比较?
c++ - C++ 强制转换和 typeid
我有一个有两个基类指针的函数,根据子类,应该调用其他函数......
像这样:
但是,有一大堆问题:
1)我读过 typeid.name 会根据编译器产生不同的结果,因此我不想使用它。
2)我考虑过创建一个“B”的实例而不是编写if(typeid(*a2) == typeid(instanceOfB))
,但这将是很多工作,因为有很多构造函数参数......
3)我也考虑过使用 dynamic_cast 但一些子类看起来像这样:
因此,如果我想通过动态转换检查参数是否为 B,即使参数实际上是 C,它也会通过,因为 C 继承自 B
编辑:看来我必须重新考虑设计,但由于许多人表示设计存在缺陷,我将快速解释我的思路:
有一扇窗户。几个不同的对象位于窗口内并四处移动,一个游戏。该功能应该用作碰撞检测。像这样:遍历屏幕上的所有对象,检查是否发生碰撞。将两个碰撞的对象作为参数并调用此函数。此函数查找不同的碰撞,例如“如果 a 是“箭头”而 a2 是“强盗”,则执行一些操作,但如果 a2 是“树”,则改为执行此操作!
c++ - Typeid 无法正常工作
我无法正确获取 typeid 函数。我错过了什么吗
代码:
它总是打印:
B 类 A 类 A 类
我正在为我的项目使用 VS2010
c++ - c++filt 不会对 typeid 名称进行分解
我在 GCC C++编译器上运行代码,以输出 type_info::name:
但我得到以下结果:
并在拆解时,
我得到与之前相同的输出。还有其他解决方案吗?
c++ - 尝试在模板 C++ 中返回变量时出错
所以我试图在 Windows 中获取剪贴板的内容,因为它可以是任何类型,我使用模板来获取它,但是在尝试构建时,Visual Studio 2013 RC 发送此错误:
继承人的代码:
提前致谢。
templates - typeid 作为 VS2012 中的专门模板参数导致代码分析失败
我有一个将类与数据库结合的遗留 ORM,它在 VS2008 和 VS2012 下编译得很好。我尝试使用 VS2012 代码分析的功能,它给了我编译错误 C2975 和 C2440。我已经提取了相关代码以帮助隔离问题:
对于每个 template<> 行,我得到以下一对错误:
看来编译器将 typeid<...> 视为模板的 int 参数。TYPEOF() 宏用于声明与宏参数类型相同的新变量。这个宏嵌入在其他宏中,我愿意接受替代/更好的方法来做到这一点。它按原样工作,但 VS2012 的代码分析功能阻塞,我不知道为什么。
任何帮助表示赞赏。谢谢。
c++ - type_info 的包装类
所以,我发现了这个关于 C++ 事件的非常好的教程:
但是:创建者对 typeid 返回的 type_info 使用包装器。据我了解,由于 type_info 的 = 运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,我将如何解决这个问题,我应该简单地使用 type_info.hash_code - 这是否可以单独识别一个类?还是我不明白他在这种情况下所说的“包装器”是什么意思?