对接口指针进行动态强制转换

dynamic cast on interface pointer

本文关键字:转换 动态 接口 指针      更新时间:2023-10-16

我需要动态转换接口指针,但我的接口没有任何虚拟方法,基本上我不控制接口的代码,我想用户相同的指针使用方法从两个接口,如果我动态转换那么因为接口不是多态类型,它不允许,我有什么选择?

代码如下所示

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,编译器或运行时也无法告诉您。

也许还有Interface1Interface2的其他字段,你可以看看它是否真的是Interface3,但这取决于你选择不包括在你的问题中的库的细节。

如果你需要更多的帮助,你必须在你的问题中提供更多的细节。