问题标签 [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++ - 是否有用于标准化类型名称字符串格式的 C++ type_info 的可移植包装器?
的输出格式type_info::name()
是特定于实现的。
有没有人写过一个包装器,它返回可靠的、可预测的类型信息,这些信息在编译器中是相同的。多个模板化函数将允许用户获取有关类型的特定信息。所以我也许可以使用:
这些函数只是示例,对 C++ 类型系统有更好了解的人可能会设计出更好的 API。我感兴趣的那个base()
。如果 RTTI 被禁用或检测到不支持的编译器,所有函数都会引发异常。
这似乎是 Boost 可能实现的那种东西,但我在任何地方都找不到它。是否有一个便携式库可以做到这一点?
c++ - 编译器如何评估 `typeid` 运算符?
这是我用来尝试解决这个问题的一些基于 CRTP 的模板代码: Requiring overridden virtual functions to call base implementations。我会在这里发布代码,但是这些行很长,并且在 codepad.org 上更容易阅读(如果需要,我会在这里发布)。当然,它很丑陋,而且有些人为,尽管它确实有效。但我一开始并没有意识到,虽然它可以在 MSVC++ 和 GCC 上编译,但某些模板类型并没有真正定义。我要质疑的部分是顶部函数中的几个长内部if( typeid( Derived(N) ) != typeid( Derived(N-1))
(符号符号) 。TBase::OnEvent
你不能typdef
使用这些类型,这将是一个编译错误 - 没有足够的派生类可以用这么长的...::TDerived::...
链定义类型,所以你会正确地得到编译错误TDerived is not defined in TBase
。然而编译器会吃掉它们typeid
。当我检查调试器 MSVC++ 编译器输出(带有完整的符号信息)时,似乎所有那些...::TDerived::...
不应该真正导致任何类的 long 都typeid
被编译器解析为TDerived04
类链中的最后一个。...::TDerived::...
并且 RTTI 被拉到班级链中的最后一个班级,与我有多少无关。
考虑到 MSVC++ 和 GCC 都是这样做的(尽管我只能通过 codepad.org 访问 GCC),我的问题是下一个:它是否以某种方式定义了行为typeid
?那么为什么typedef
那些长的...::TDerived::...
不解决TDerived04
呢?
编辑:我的意思是,我很高兴typedef
没有解决TDerived04
,这对于任何使用 的人来说都是一场灾难,但为什么和typedef
之间存在这种不一致呢?typeid
typedef
编辑:GCC 接受TDerived04::TDerived04::TDerived04::TDerived04 lD4;
变量声明。而且类型简单TDerived04
到底。是否有折叠范围解析的规则?显然,MSVC++ 和 GCC 似乎都在做同样的事情typeid
,但是与 GCC 不同,MSVC++ 无法处理其他情况——它会产生编译错误,需要构造函数的参数。
c++ - 在 C++ 中找出对象或变量的标识符名称和类型标识?
我开始学习 C++(一年前)主要是因为它是 IMO 通用语言,因为几乎一切皆有可能。但有一件事并非如此:例如,我们正在一个对象(类)中编写一些代码,我们需要以某种方式找出它的名称:
最好的选择是使用“this”关键字,但这无济于事,因为“this”不能返回名称?
我们如何在一些通用函数甚至模板中获取“thatsMyName”字符串?
另一个例子:(也请回答这个问题)
我们如何获得某个类的 typeid?
这看起来很有趣,但如果你们中的任何人对如何完成类似任务有一些想法......
多谢。
编辑:好的,每个人都说不可能获得对象的名称,我发现了如何获得名称:
编辑:非常感谢 Fiktik 回答我的第二个示例,他找到了如何获取对象的 type_info 的方法!
c# - 两个语义相同的属性的 TypeId 应该不同还是相同?
MSDN 声明该属性TypeId
:
正如所实现的那样,这个标识符仅仅是属性的类型。但是,唯一标识符旨在用于标识相同类型的两个属性。
然而,预期用途是区分单个属性实例(例如,与应用它们的类的不同实例相关联的实例)还是区分具有相同类型但由于其属性值在语义上不同的属性?
例如,假设我有以下内容:
我应该将 TypeId 实现为
或者
c++ - 为什么 typeid 返回 int 和 const int 是相同的类型
节目输出:
相同类型
我错过了什么吗?这些不是相同的类型,哈哈。
c++ - typeid 和 type_info 类
在 type_info 类的声明中,我找不到任何数据成员。那么构造或破坏了什么?typeid 也没有在其中声明。那么它是如何访问 type_info 对象的呢?
上面的表示不完整吗?请讲讲类中数据成员的type_info
类型
c++ - 为什么使用 typeid 关键字设计不好?
我听很多人说任何使用typeid
都是糟糕的设计,但对我来说,它似乎提供了很好的实用性。
- 何时(以及为什么)使用
typeid
“糟糕的设计”? - 什么时候
typeid
可以接受使用? - 当它不可接受,但您仍然需要类似的东西时,有什么替代方案会具有良好的设计?
c++ - gdb:显示一些数据的类型信息
基本上,我想得到typeid(*this).name()
,即this
.
我想在 GDB 中得到这个(不修改源代码)。我试过print typeid(*this)
了,但它说这typeid
是未知的(因为我没有将它包含在源文件中)。
c++ - 模板功能搞砸了
所以我的 ResourceManager 类对于我正在使用 c++ 进行的游戏有一些问题。所以我试图从我的常规 addImage 函数中创建一个模板函数,这样它也会添加声音,但是我遇到了一些我无法真正处理的错误,你们能帮帮我吗?:D
.hpp
.cpp
错误@_@
c++ - 在由同一编译器编译的另一个进程提供的指针上使用 typeid 是否安全?
根据标准,typeid 操作符是依赖于实现的,所以在不同编译器编译的其他进程创建的对象上使用它是无稽之谈。但是提供进程由同一个编译器编译是什么情况呢?