问题标签 [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 投票
3 回答
1080 浏览

c++ - typeid() 面向对象的设计替代方案

我有以下类使用 3 个不同的映射:键始终是字符串,而值可能是字符串、整数或浮点数。

这些addValue()函数只是将一个新的对添加到相关映射中。我正在处理的是addKey()模板功能:

基本上,我使用templateandtypeid()因为我不喜欢这种依赖于type-within-function-name 的替代方案:

第一个addKey()版本似乎工作,但我想知道是否有更优雅的解决方案。也许我错过了一些在这种情况下可能有用的面向对象的设计概念?

提前致谢。

0 投票
1 回答
6269 浏览

c++ - C++ - 如何检查模板类类型是否为无效?

我需要一种方法来检查模板类的类型是否为无效。

这是我的尝试:

但是,这会产生一个编译器错误,抱怨在创建“start_function_type”和“end_function_type”为无效的 C_rule 对象时将两个变量“start_function_return_value”和“end_function_return_value”声明为无效。我试图阻止创建一个变量来存储规则的“开始”和“结束”函数的返回值,如果这些函数的返回类型是 void(因为 void 函数显然不返回任何内容)。而且,如您所见,我正在尝试为此目的使用 typeid 运算符,但它似乎不起作用。显然,当 start_function_type 和 end_function_type 为 void 时,仍在输入 if 语句,我不知道为什么。也许 typeid 没有 t 与 void 一起工作?我用谷歌搜索了这个问题,但找不到答案,所以我在这里问这个问题。

提前致谢。

0 投票
3 回答
919 浏览

c++ - lambda 函数的类型

有这个代码:

结果是:Z4mainEUliE_但是 c++filt 似乎没有解释它是什么。什么是 lambda 表达式?

0 投票
1 回答
129 浏览

c++ - 制作一个优化未使用部分的元组样式类

这更多是关于 C++ 编译器如何处理 const typeid 调用的问题。

你好!我正在尝试创建一个元组样式的类,其配置方式使我不必重写一堆具有专业化的代码。

所以这是一般的想法:

所以我的问题是这种优化甚至可以在 C++ 中实现吗?如果不是这样,对我来说,在子节点上使用继承模型而不是这个级别的模板可能更有意义。但是,我试图避免不断检查指定类型的数量和间接成本。

我将开始深入研究程序集,看看编译器是否这样做......以防这不是标准化的行为,我正在使用 Microsoft Visual C++ Compiler 10.0。

0 投票
2 回答
24736 浏览

c++ - 如何在 C++ 中确定运行时的实际对象类型;

假设我们有一个类层次结构。在底部我们有 Base 和在顶部 Derived。即使转换为基类指针,如何确定对象类。

除了手动实现字符串字段或此类虚拟获取功能之外,还有其他方法吗?

PS:我说的是独立于编译器的解决方案

0 投票
2 回答
4816 浏览

c++ - 使用 typeid 时获取不正确的类名 -

为了我自己的理解,我已经实现了以下程序。但是我看到 typeid 返回的类名略有修改。我知道这可能是因为名称修改,但包括 extern C 也无济于事。

有人可以帮我理解为什么会出现这种行为以及如何解决吗?

g++ 版本 - 4.7.0

我期待程序中指定的类名。

非常感谢。

0 投票
4 回答
4040 浏览

c++ - 如何在 C++ 中删除与 typeid( ).name( ) 关联的数字?

我有一个工厂方法类,它生成“项目”并返回一个指向它创建的项目的指针。

我有 Item 的派生类。例如,Item 可以是“武器”、“消耗品”或“盔甲”。

我需要检测创建了哪种类型的项目,以便我可以正确地将项目转换为该类型。我做了一些测试行,看起来它正在做我想做的事,除了添加一个与类型相关的数字。

例子:

我有这行:

它返回基类 Item,但它会显示:“4Item”

然后我将其更改为:

这会给我正确的派生类型,但也会输入那个数字。所以我得到类似“5Armor”的东西

为什么 pItem 返回基类?为什么它会返回一个 int 类型?我怎样才能删除int?

一个做我想要的解决方案 - 以一种“作弊”的方式:

谢谢

0 投票
1 回答
251 浏览

c++ - typeid() 是否足以保证类型安全?

我想知道typeid类型安全是否是一个“足够硬”的标准来放弃所有通常的预防措施。具体来说,请考虑以下代码片段:

使用来自的信息从地图中取回对象是否安全typeid

谢谢,N。

0 投票
2 回答
948 浏览

c++ - 如何使用 typeid 检查您的对象是哪个派生类?

所以我想测试我的对象是药水还是武器。我如何使用 typeid (即或任何与此相关的东西)来做到这一点?

然后我想根据这个条件实例化一个对象。我不能只说 T temp 因为那会实例化一个抽象基类(即我的 Item 类中有一个纯虚函数)。

0 投票
1 回答
2021 浏览

c++ - C++11 中唯一类型识别的最安全方法

在新标准形成期间的某个地方,有一个更容易type_info使用的承诺,其中包括hash_code. 在 C++11 中实现反射系统但是我再次遇到了唯一类型识别的问题。

我需要:

  1. 允许我使用 typeid 从类型中提取唯一标识符的东西
  2. 唯一标识符需要能够在键/值容器中使用
  3. 标识符不需要是可移植的,甚至在程序执行之间也不需要相同

请注意,我不需要程序执行之间的持久性。看起来:

  1. .name()完全没用,因为该标准对此没有任何保证。
  2. .hash_code()也是无用的,因为它不能保证是唯一的
  3. 获取指向type_info对象的指针并不适用于任何地方(例如跨 DLL)
  4. 只是.before()似乎有用-尽管我不知道它是否不会遇到与#3相同的问题

即使.before()是要使用,那么我们可以使用map,而我更喜欢使用unordered_map

以上碰撞安全吗?排序运算符是否保证覆盖 !< 和 !> 值?

有没有办法在没有哈希冲突风险的情况下解决这个问题?

在汇总我自己的类型系统方面,我已经这样做了,但是typeid解决了从基类型(继承)提供正确的最终类型的问题,并且我不想向我的类添加任何字段(类型系统是“外部”)。

即使在 C++11 中,我们仍然被搞砸了?:/