在Chaiscript中绑定C ++本机方法时的继承问题

时间:2010-07-07 08:20:26

标签: c++ qt4 chaiscript

我使用此代码验证ChaiScript中一组Qt对象的一些属性:

    /// initialize the engine
    boost::shared_ptr<chaiscript::ChaiScript> chai;
    chai.reset(new chaiscript::ChaiScript());
    std::cout << "ChaiScript engine created!!!" << std::endl;


    ///
    /// register elements
    //
    assert(ui->checkBox);
    chai->add(chaiscript::var(ui->checkBox), "checkBox");

    ///
    /// adapt elements

    /// QCheckBox
    chai->add(chaiscript::fun(&QCheckBox::isTristate), "isTristate");
    chai->add(chaiscript::fun(&QCheckBox::isChecked), "isChecked");


    /// validate some properties
    try
    {
        chai->eval("print(\"Starting evaluation...\")");
        int answer_i = 0;
        bool answer_b = false;
        //answer_b = chai->eval<bool>("checkBox.isTristate()");
        answer_b = chai->eval<bool>("checkBox.isChecked()");

        std::cout << "ChaiScript::: " << answer_b << " :: " << answer_i << std::endl;
    }
    catch(std::exception e)
    {
        std::cout << "ChaiScript@Exception::: " << e.what() << std::endl;
    }

问题是“isTristate()”调用有效,因为这是QCheckBox的本机方法。另一方面,“isChecked()”调用失败,我认为因为这是来自QAbstractButton类的继承方法。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

最新的ChaiScript SVN版本允许用户添加基类关系,从而解决了这个问题。

chai.add(base_class<Base, Derived>());

继承的函数调用之后按预期工作,而不需要澄清基类方法指针类型,如答案所示。

答案 1 :(得分:0)

问题已通过以下方式解决:

/// method binding
chai->add(chaiscript::fun<bool (QCheckBox *)>(&QCheckBox::isChecked), "isChecked");

有必要指定绑定方法属于QCheckBox类,以便不将引用绑定到父方法。

干杯!!!