gpt4 book ai didi

c++ - 模拟 qobject_cast 失败

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:20 25 4
gpt4 key购买 nike

我有一个纯虚拟A类,我在上面做

Q_DECLARE_INTERFACE(A, "org.something.A")

我有一个实现为类 B 的插件,它继承了 A 和 QObject,具有接口(interface) A 并实现了 A 的所有纯虚方法

class B : public QObject, public A
{
Q_OBJECT
Q_INTERFACES(A)

public:
void someMethod();
}

在 cpp 中:

Q_EXPORT_PLUGIN2(A, A)

这很好用。实际上有很多不同的接口(interface),核心应用程序(我没有写过,也不能做大的修改)调用

qobject_cast<A *>(bPointer);

并检查结果以了解某个插件是否实现了接口(interface)。

所有这些都非常有效。

但是,我希望在 B 类中在运行时确定我是否要实现某个接口(interface)。

这些方法总是会被实现,但我有时希望 qobject_cast 失败但在运行时确定(对于同一接口(interface),单个实例总是失败或成功)。

这听起来可能很奇怪,但这样做的原因是我想添加 Python(或其他语言)插件。他们会有一个 C++ 包装器。他们的 python 源代码将使用 rcc 文件存储。所有 Python 插件的 C++ 代码应该相同。

c++ 包装器将调用 python 方法来确定 python 代码实现了哪些接口(interface),如果 python 代码未实现接口(interface),则使 qobject_cast 失败。C++ 包装类将实现所有接口(interface)方法并将调用转发给 python,但只有成功转换的才会真正被调用。

通过重新实现 QObject 的元相关方法可能是可行的,但我不知道是哪个。

我希望你能理解我试图做的事情(虽然不是很清楚)。也许有一种完全不同的方式来做到这一点?

谢谢

最佳答案

您无法更改 qobject_cast 行为,仅使用公共(public) Qt API。另请注意,每个插件库只能有一个插件对象实例。

解决方案将是一个插件,作为工厂工作并按请求返回接口(interface)。

关于c++ - 模拟 qobject_cast 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com