我需要动态地转换接口指针,但我的接口没有任何虚拟方法,基本上我不控制接口的代码,我想用同一个指针来使用来自两个接口的方法,如果我动态转换然后接口是不是多态类型,它不允许,我有什么选择?
代码看起来像这样
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不是多态的,现在我无法控制接口,但我想使用相同的指针同时接口,我该如何实现呢?
答案 0 :(得分:3)
考虑到您编写的几乎代码,您知道ptr
指向Interface2
,如果您有某种方式可以确定ptr
实际上指向Interface3
1}},你可以使用静态强制转换:
Interface3 *ptr3 = static_cast<Interface3 *>(ptr);
ptr3->koo();
但是,如果您不确定ptr
确实指向Interface3
,则编译器或运行时无法告诉您。
也许还有Interface1
或Interface2
的其他字段,您可以查看它是否真的是Interface3
,但这取决于具体细节你选择不在你的问题中包含的图书馆。
如果您需要更多帮助,则必须在问题中提供更多详细信息。