C++ 接口指针上的动态强制转换

C++ 接口指针上的动态强制转换,c++,c,pointers,interface,dynamic-cast,C++,C,Pointers,Interface,Dynamic Cast,我需要动态转换接口指针,但我的接口没有任何虚拟方法,基本上我不控制接口的代码,我想使用相同的指针来使用两个接口的方法,如果我动态转换,那么由于接口不是多态类型,它不允许,我有什么选项 代码如下所示 Interface 2 : interface 1 { foo(); } Interface 3: Interface 2 { koo(); } some class { Interface 2 *ptr; ptr->foo(); 现在我想使用相同的指

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

代码如下所示

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指向接口2,如果您有办法确定ptr实际上指向接口3,您可以只使用静态强制转换:

Interface3 *ptr3 = static_cast<Interface3 *>(ptr);
ptr3->koo();
但是,如果您不确定ptr是否真的指向Interface3,那么编译器或运行时无法告诉您

也许你可以查看Interface1或Interface2的其他字段,以确定它是否真的是Interface3,但这取决于你选择不包含在问题中的库的详细信息


如果您需要更多帮助,您必须在问题中提供更多详细信息。

您能稍微整理一下代码,使其看起来像实际代码吗?很难按原样读取。请向基添加虚拟析构函数interface@quantdev我不控制接口代码,因此无法添加。@NxC所以你注定要失败,你确定你应该从这些类型派生吗?再一次,请发布一些真正的代码听起来像是X和Y的问题。