问题标签 [dynamic-cast]

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 投票
4 回答
6027 浏览

python - types.CodeType() python 调用的参数是什么?

我目前正在尝试为 python 推出我自己的“marshal”代码,这样我就可以在 Google App Engine 上存储已编译的 python 代码,以便以动态方式提供脚本。大家都可以验证,GAE 不支持“marshal”,并且“pickle”不能序列化代码对象。

我发现我可以构造一个代码对象,types.CodeType()但它需要 12 个参数。

尽我所能,我找不到关于这个调用的任何文档,我真的需要构造代码对象,这样我才能exec()做到。我的问题是,有谁知道这个types.CodeType()“构造函数”的参数是什么或任何内省的方法?我已经使用了这里info()定义的函数,但它只吐出通用信息!

快速常见问题解答:

  • 问:为什么要编译代码?
  • 答:在 Google App Engine 上,CPU 时间会花费真金白银,而我可以节省的每一点 CPU 周期都很重要。
  • 问:为什么不用“元帅”?
  • 答:这是Google App Engine 中不支持的模块之一
  • 问:为什么不用“泡菜”?
  • A:Pickle 不支持代码对象的序列化。

更新

自 2011 年 7 月 7 日起,Google App Engine 基础架构不允许实例化代码对象,因此我的论点没有实际意义。希望这在未来能在 GAE 上得到解决。

0 投票
2 回答
170 浏览

c++ - 将指针作为参数传递给引用时的 C++ 指针转换

我很好奇,是:

完全一样:

作为参考,this->operator<被调用的是:

哪一个更“正确”并且使用安全/可靠,或者,有什么实际区别吗?

0 投票
4 回答
2500 浏览

c++ - 什么时候需要dynamic_cast?

可能重复:
c++ 中的 dynamic_cast

这两种将派生类分配给基类指针的方法有什么区别?

0 投票
1 回答
471 浏览

c++ - 什么更快:从虚拟基地向下投射或交叉投射?

这有点假设,因为我不太担心性能 - 只是想知道哪个选项实际上是最快/最有效的,或者是否没有任何区别。

假设我有以下代码用于支持重载的访问者模板:

然后将其用于创建通用访问者:

使用访问者最终会导致dynamic_cast<>'s from Visitorto VTarget<T>,这是一个交叉转换。

可以实现的另一种方式是创建Visitor一个虚拟基础VTarget<T>-MyVisitor然后不再需要直接从访问者继承。dynamic_cast<>Visitor::visit 代码中的Visitor.

执行强制转换时,一种方法比另一种方法快吗?或者您是否只因拥有虚拟基地而受到规模损失?

0 投票
5 回答
621 浏览

c++ - 重构建议:如何避免在这个 OO 设计中进行类型检查

我正在寻找有关重构的建议,以改进我的类设计并避免类型检查。

我正在使用命令设计模式来构建菜单树。菜单中的项目可以是各种类型(例如,立即操作[如“保存”]、根据其状态显示带有检查/图标的切换开/关属性[如“斜体”]等)。至关重要的是,还有子菜单,它们替换屏幕上的当前菜单(而不是显示在旁边)。这些子菜单当然包含它们自己的菜单项列表,其中可能有更多嵌套的子菜单。

代码类似于(为简单起见,全部公开):

主菜单只是 Menu 的一个实例,一个单独的类跟踪菜单位置,包括如何进入和退出子菜单:

关键函数是 Position::OnEnterPressed(),您可以在其中看到对 MenuItem::IsMenu() 的调用中的显式类型检查,然后转换为派生类型。有哪些选项可以重构它以避免类型检查和强制转换?

0 投票
5 回答
919 浏览

c++ - 在 C++ 中使用 dynamic_cast 的替代方法

我有这些课程:

我想做这个:

由于它不起作用,我该怎么做才能避免这种情况:

谢谢你。

编辑:好的,现在所有的“错误”都已修复。

0 投票
1 回答
1093 浏览

c++ - 快速的动态铸造进度

不久前,我发现一篇非常有趣的论文,关于 C++ 中 dynamic_cast 的非常简洁的性能升级:http ://www2.research.att.com/~bs/fast_dynamic_casting.pdf 。

基本上,它使 C++ 中的 dynamic_cast 比传统的继承树研究更快。如论文所述,该方法提供了一种快速、恒定时间的动态铸造算法。

这篇论文发表于 2005 年。现在,我想知道该技术是否曾经在某个地方实施过,或者是否有计划在任何地方实施?

0 投票
3 回答
725 浏览

c++ - 来自 C++/Stroustrup 的 dynamic_cast 疑问:转换为受保护的基类

我知道以下代码会产生编译错误:

但是为什么他在 C++ Stroustrup 书 (15.4.1) 中写道

该行不应该是编译错误吗?因此,要么我的 gcc 错误地将其标记为编译错误,要么是不可想象的 stroustrup 错字,或者最有可能我错过了一些东西......

0 投票
1 回答
11694 浏览

c++ - dynamic_cast 如何失败?

根据我阅读的内容,执行错误的运行时 dynamic_cast 可能会引发 bad_cast 异常或返回零。

如果你正在转换指针,它会返回零是否正确?

IE:

并且在转换对象时会抛出 bad_cast 异常?

IE:

0 投票
1 回答
5463 浏览

c++ - 从函数返回后丢失 RTTI 信息

给定一个类和子类:

注释被克隆并存储在函数 f() 内的指针中。类型信息保存在指针中,可以通过 dynamic_cast 恢复:

现在,从 f() 返回后,类型信息丢失了:

VS 调试器显示一个有效的指针值(未更改),但不是派生类,除了在f()-scope 中运行时。

从函数返回时,指针的 RTTI 信息如何丢失?