实现脚本化按钮行为

时间:2019-08-22 08:33:12

标签: c++ user-interface scripting

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

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

class Button
{
public:
   Button();
   virtual void onClick();
};

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

我正在寻找一种从外部描述行为的方法(可能是脚本语言),并将其插入到编译时基本按钮的特定实例中,因此我无需创建button的子类,并且按钮/组件可以在外部文件。任何强项或建议将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

好吧,我想您还有另一个XY problem:使用运行时对象多态不能解决您的愿望。尽管它使C ++代码不必关心一个特定的实现,并且可以在运行时接受新的未知解决方案,但是这些新解决方案仍必须使用C ++编译器进行编译,并且必须与基类定义和C ++实现兼容(您的像gcc或MSVC这样的编译器)运行时多态性的特定细节。

由于我假设您不希望这样做,这也很有意义,并且是在C ++世界中流行的一种模式(请参阅QML或Javascript / C ++杂种),因此您可以选择。

要么在C ++中实现所有基本的行为构建块(您当然可以在其中使用运行时多态性,甚至可以使用compile time polymorphism),然后您可以在运行时根据UI描述语言简单地将其组合在一起。要解析所谓的DSL即UI描述语言,您可以使用Boost Boost之类的库。

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

但是请不要失望,这些现成的解决方案,例如Javescript / C ++,使用native node modules,QML / Qt或lua(一种专门设计的脚本语言)以反应本机和电子的形式用于其他编程语言。