接口指针上的动态转换

时间:2014-08-19 21:45:23

标签: c++ c pointers interface dynamic-cast

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

代码看起来像这样

Interface 2 : interface 1
{
     foo();
}
Interface 3: Interface 2
{
     koo();
}

some class
{
     Interface 2 *ptr;
     ptr->foo();

现在我想使用相同的指针访问接口3方法

dynamicaly强制转换接口指针

     Interface3 *ptr = dynamic_cast<Interface3 *>(ptr);
     ptr->koo();
}

它告诉我不能做,因为Interface3不是多态的,现在我无法控制接口,但我想使用相同的指针同时接口,我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

考虑到您编写的几乎代码,您知道ptr指向Interface2,如果您有某种方式可以确定ptr实际上指向Interface3 1}},你可以使用静态强制转换:

Interface3 *ptr3 = static_cast<Interface3 *>(ptr);
ptr3->koo();

但是,如果您不确定ptr确实指向Interface3,则编译器或运行时无法告诉您。

也许还有Interface1Interface2的其他字段,您可以查看它是否真的是Interface3,但这取决于具体细节你选择不在你的问题中包含的图书馆。

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