实现可编写脚本的按钮行为

Implementing scriptable button behavior

本文关键字:按钮 脚本 实现      更新时间:2023-10-16

我正在为我的C++项目开发自定义轻量级UI库,我对实现控件的行为有疑问。

目前,我有从提供的文件创建控件实例的系统,因此图形表示,文本,尺寸和其他参数在外部文件中定义。关于按钮和其他交互式控件:我有基按钮类,对于每个按钮,我都在创建派生类,其中包含自己的行为相关方法(onClick(( 等(的实现,请参见伪代码段:

class Button
{
public:
Button();
virtual void onClick();
};
class newButton : public Button
{
void onClick()
{}//specific implementation
};

我正在寻找在外部描述行为(可能是脚本语言(并将其插入编译时基本按钮的特定实例的方法,所以我不需要创建按钮的子类,并且按钮/组件可以在外部文件中完全描述。任何挑战或建议将不胜感激。

谢谢

好吧,我想你遇到了另一个XY问题:使用运行时对象多态性无法解决你的愿望。尽管它使C++代码不必关心使用哪个特定实现,并且可以在运行时接受新的未知解决方案,但这些新解决方案仍然必须使用C++编译器进行编译,并且符合基类定义和C++实现(您的编译器,如 gcc 或 MSVC(运行时多态性的特定细节。

由于我假设您不希望这样做,这也是有道理的,并且是一种在C++世界中流行的模式(参见QML或Javascript/C++混合体(,因此您有一些选择。

要么在C++中实现所有基本行为构建块(当然可以使用运行时多态性甚至编译时多态性(,然后在运行时根据UI描述语言简单地组合它们。要解析所谓的DSL,即UI描述语言,您可以使用像boost spirit这样的库。

如果你真的要编写UI逻辑的脚本,而不是简单地描述它,你必须设计和实现一个完整的编程语言,它也与你的C++实现运行时对象多态性兼容。我会发现这是一项非常艰巨而漫长的任务。

但不要失望,这是现成的解决方案,如Javescript/C++,以使用本机节点模块的反应原生和电子的形式,或QML/Qt或lua,一种脚本语言,专门设计用于其他编程语言。