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

c++ - dynamic_cast 返回 NULL 但它不应该

我有以下类层次结构:

我正在使用 QT 并尝试使用 QtPlugin 创建一个插件(为我的应用程序)。我正在创建一个 DASQLiteStorage 的实例,并将这个实例提供给插件内部的一个对象:

问题是,dynamic_cast 向我返回了一个空指针(不是预期的),而在我的主应用程序中执行 dynamic_cast(即在“gateway->setDefaultStorage(storage);”之前)给了我有效的指针(预期的)。

有谁知道为什么会发生这种情况?程序是否在与插件不同的内存范围内运行?这会导致这样的问题吗?任何想法如何解决这一问题?

非常感谢!


编辑:我尝试了一些建议:

在方法的第一行中,s 等于 NULL,在第二行中 s 包含正确的指针,在第三行中是另一个指针。为什么这些指针不相等?
为什么尽管我现在正在使用 dynamic_cast 仍然无法工作:




EDIT2:我注意到,我在代码中得到的分段错误也与此有关。我有以下构造:

这些分段错误不应该发生,不是吗?但他们为什么要这样做?

0 投票
3 回答
3959 浏览

c# - 有没有办法在 C# 中进行动态隐式类型转换?

给定带有隐式强制转换运算符的此类:

我现在可以执行以下操作:

但不是以下内容:

这给出了编译时间:

无法将类型“object”隐式转换为“MyDateTime”。

我感觉合理。

现在我将前面的例子修改如下:

这编译得很好。现在我得到一个运行时InvalidCastException

无法将“System.Int64”类型的对象转换为 MyDateTime 类型。

这告诉我,C# 隐式转换运算符仅在编译时应用,而不是在 .NET 运行时尝试将对象动态转换为另一种类型时应用。

我的问题:

  1. 我对么?
  2. 还有其他方法可以做到这一点吗?

顺便说一句,完整的应用程序是我Delegate.DynamicInvoke()用来调用一个带MyDateTime参数的函数,而我传递给的参数的类型DynamicInvoke是 long。

0 投票
13 回答
224894 浏览

java - java:如何将变量从一种类型动态转换为另一种类型?

我想对 Java 变量进行动态转换,转换类型存储在不同的变量中。

这是常规铸造:

这就是我要的:

这可能吗,如果可以,怎么办?谢谢!

更新

HashMap我正在尝试用我收到的一个类来填充一个类。

这是构造函数:

这里的问题是某些类的变量是 type Double,如果收到数字 3 ,它会将其视为Integer并且我有类型问题。

0 投票
2 回答
1043 浏览

c++ - Template deduction in dynamic_cast

I have a class that is defined as the following:

Inside a function I am doing this:

and it resolves the CometWidget type, complies and run correctly.
The code runs inside the CometWidget class.

How on earth does this happen?
Why is that so? Should it even compile?

0 投票
10 回答
212863 浏览

c++ - C++ 中的 dynamic_cast 和 static_cast

dynamic_cast对 C++ 中的关键字感到很困惑。

定义说:

dynamic_cast关键字将数据从一种指针或引用类型转换为另一种,执行运行时检查以确保转换的有效性

我们可以在 C 中编写相当于dynamic_castC++ 的内容,以便我更好地理解事物吗?

0 投票
4 回答
7546 浏览

c++ - 与 dlopen/dlsym 一起使用时 dynamic_cast 失败

介绍

让我为这个冗长的问题提前道歉。它尽可能短,不幸的是,它不是很短。

设置

我定义了两个接口,A和B:

然后,我有一个共享库“testc”构造 C 类的对象,实现 A 和 B,然后传递指向它们的 A 接口的指针:

最后,我有第二个共享库“testd”,它以 aA*作为输入,并尝试将其转换为 a B*,使用dynamic_cast

最后,我有主应用程序,A*在库之间传递 's:

问题

如果我构建我的主应用程序,链接到“testc”和“testd”库,一切都会按预期工作。但是,如果我将主应用程序修改为不链接到“testc”和“testd”,而是在运行时使用dlopen/加载它们dlsym,那么会dynamic_cast失败。

我不明白为什么。有什么线索吗?

附加信息

  • 使用 gcc 4.4.1、libc6 2.10.1 (Ubuntu 9.10) 测试
  • 可用的示例代码
0 投票
3 回答
375 浏览

c++ - 关于使用任意类型的给定参数进行任意操作的任何建议?

基本上我只想使用任意类型的给定参数进行任意操作。

参数类型基类是 Var,而 Operation 是将为给定参数执行的操作的基类。

我有 Evaluator 类,它包含一组使用 opId 映射的运算符。Evaluator 将根据 evaluate() 成员函数中给出的 opId 参数进行操作,然后 evaluate() 函数将搜索支持的运算符,该运算符将接受参数类型和 opId。

我想问的是,是否有任何有效的模式或算法可以在没有 dynamic_cast<> 和/或循环操作符集合的情况下做到这一点。

`

`

0 投票
2 回答
2709 浏览

c# - 动态投射对象

大家好,我正在尝试将两个对象转换为基于属性反射信息的特定类型。我想动态地做到这一点,所以我不需要一堆开关案例,对于每个类型,这两个对象都可以在这个类中。总体而言,它们将主要是 int 或 float。目前我正在尝试使用“var”和“object”关键字来保存传入的调整值和属性原始值。

传入的调整值是一个字符串,但是是“int”或“float”格式,因此很容易转换。所有这一切都很好,只是允许使用新的调整值调整原始值的铸件才是问题所在。

我知道 .NET 4.0 有一个“动态”关键字可以完成这样的事情,但目前我坚持使用 3.5。

两个对象都将使用属性信息 propInfo.GetType() 中的类型。

对此的任何帮助将不胜感激,我相信我可能在这里忽略了一个基本的事情来完成这项工作。提前致谢。

-CK

编辑:

忘了说,抱歉,这是在 Zune HD 上开发的,所以我可以访问的框架相当有限,可以/不能使用。

0 投票
3 回答
292 浏览

interface - Polymorphism problem: How to check type of derived class?

this is my first question here :)

I know that I should not check for object type but instead use dynamic_cast, but that would not solve my problem.

I have class called Extension and interfaces called IExtendable and IInitializable, IUpdatable, ILoadable, IDrawable (the last four are basicly the same). If Extension implements IExtendable interface, it can extend itself with different Extension objects.

The problem is that I want to allow the Extension which implements IExtendable to extend only with Extension that implements the same interfaces as the original Extension.

You probably don't unerstand that mess so I try to explain it with code:

Now imagine the case that I create Extension like this:

And I want to allow this class to extend itself only with Extensions that implements the same interfaces (or less). For example I want it to be able to take Extension which implements IUpdatable; or both IUpdatable and IDrawable; but e.g. not Extension which implements ILoadable. I want to do this because when e.g. Update() will be called on some Extension which implements IExtendable and IUpdateable, it will be also called on these Extensions which extends this Extension.

So when I'm adding some Extension to Extension which implements IExtendable and some of the IUpdatable, ILoadable... I'm forced to check if Extension that is going to be add implements these interfaces too. So In the IExtendable::AddExtension(Extension*) I would need to do something like this:

But how? Any ideas what would be the best solution? I don't want to use dynamic_cast and see if it returns null... thanks

0 投票
5 回答
17145 浏览

c++ - 从基类指针 C++ 访问子类成员

我有一组自定义类学生对象。CourseStudent 和 ResearchStudent 都继承自 Student,Student 的所有实例都是其中之一。

我有一个函数来遍历数组,确定每个学生的子类型,然后在它们上调用特定于子类型的成员函数。

问题是,因为这些函数没有重载,所以在Student中是找不到的,所以编译器就大惊小怪了。

如果我有一个指向 Student 的指针,有没有办法获得指向该 Student 子类型的指针?我需要在这里做一些假演员来解决编译时错误吗?