gpt4 book ai didi

c++ - 如何从驻留在其他 git 存储库中的插件访问应用程序中定义的 interfaces.h?

转载 作者:行者123 更新时间:2023-11-28 04:26:34 25 4
gpt4 key购买 nike

总结

Qt 提供了使用插件扩展应用程序的接口(interface)。此接口(interface)往往在应用程序的 header 中定义并包含在插件中。如果我的应用程序和插件有不同的 git repos,我如何以可扩展的方式将接口(interface)包含在插件中?

例子

让我们使用 Plug & Paint example来自 Qt 的文档。这是主应用程序,在 interfaces.h 中定义了 BrushInterfaceShapeInterfaceFilterInterface 的接口(interface)。

// plugandpaint/interfaces.h
// (...)
class BrushInterface
{
// (...)
};

class ShapeInterface
{
// (...)
};

class FilterInterface
{
// (...)
};
// (...)

Plug & Paint Basic Tools example定义一个符合这些接口(interface)的插件。为此,它必须在其插件类定义中包含来自应用程序的 interfaces.h。

// basictools/basictoolsplugin.h
// (...)
#include <plugandpaint/interfaces.h>

class BasicToolsPlugin : public QObject,
public BrushInterface,
public ShapeInterface,
public FilterInterface
// (...)

该示例假定插件位于主应用程序下方的 2 个子文件夹中,并将以下行添加到插件的 .pro 文件以包含其 header 。

INCLUDEPATH  += ../..

问题

这是好的做法吗?我是否应该遵循此约定并始终将插件 git repos 2 子文件夹克隆到应用程序下方“硬编码” INCLUDEPATH../..

一种替代方法是在插件中有一个 interfaces.h 文件的拷贝,但是“原始”文件中的更改可能会破坏插件。有没有办法在应用程序和插件之间拥有不同但兼容的 interfaces.h 文件?例如,如果app repo中的interfaces.h文件添加/删除了插件未使用的接口(interface),是否会影响插件的使用?

最佳答案

我的建议是在您的特定情况下为 header 接口(interface)使用一个公共(public)存储库,因为您既是插件的创建者又是插件的使用者。 IIRC,这就是我很久以前在类似应用程序中所做的(应用程序和插件会将这个额外的存储库用作子模块)。

对于第三方用户,应在安装应用程序后安装 header ,并且应在构建插件时设置此路径(例如使用 MyApp.cmake 的 CMake)。

所以两种方案,看接口(interface)的用途。

关于c++ - 如何从驻留在其他 git 存储库中的插件访问应用程序中定义的 interfaces.h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54184092/

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