对接口指针进行动态强制转换
dynamic cast on interface pointer
我需要动态转换接口指针,但我的接口没有任何虚拟方法,基本上我不控制接口的代码,我想用户相同的指针使用方法从两个接口,如果我动态转换那么因为接口不是多态类型,它不允许,我有什么选择?
代码如下所示
Interface 2 : interface 1
{
foo();
}
Interface 3: Interface 2
{
koo();
}
some class
{
Interface 2 *ptr;
ptr->foo();
现在我想使用相同的指针访问接口3个方法
动态强制转换接口指针
Interface3 *ptr = dynamic_cast<Interface3 *>(ptr);
ptr->koo();
}
它告诉我不能做,因为Interface3不是多态的,现在我没有对接口的控制,但我想使用相同的指针两个接口,我怎么能做到这一点?
给定您编写的几乎代码,其中您知道ptr
指向Interface2
,如果您有某种方法确定ptr
实际上指向Interface3
,则可以使用静态强制转换:
Interface3 *ptr3 = static_cast<Interface3 *>(ptr);
ptr3->koo();
但是,如果您不确定ptr
是否真的指向Interface3
,编译器或运行时也无法告诉您。
也许还有Interface1
或Interface2
的其他字段,你可以看看它是否真的是Interface3
,但这取决于你选择不包括在你的问题中的库的细节。
如果你需要更多的帮助,你必须在你的问题中提供更多的细节。
相关文章:
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 重构使用动态强制转换的 std::set 的比较运算符
- 指针类型类成员的动态强制转换的恒定性是什么?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- C++动态将矢量转换为 2D
- 为了访问方法,从基类动态转换为派生类
- 如何对以下程序使用静态或动态转换
- 复制交换习惯用法-我们可以在这里使用动态强制转换操作吗
- 函数返回动态强制转换的指针,返回指针,就好像它根本没有被转换一样
- 使用静态转换,因为动态转换失败.不好的做法?
- 动态强制转换的运行时检查
- 在 c++ 中动态强制转换 ** 数组
- C++:使用重载而不是动态强制转换通过基选择派生类
- 使用动态强制转换的 Lambda
- 用于验证类型的动态强制转换
- 动态强制转换指向引用的指针和指向指针的引用
- 需要派生类的动态强制转换:寻找替代方法
- 我如何转换一个基于动态的,基于指针的int堆栈,以便将其打印成字符串
- 动态强制转换 (dynamic_cast) 在 OSx (XCode ) 上使用 .dylib 时失败