代码之家  ›  专栏  ›  技术社区  ›  pedromateo

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

  •  0
  • pedromateo  · 技术社区  · 14 年前

    我使用此代码验证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 回复  |  直到 6 年前
        1
  •  1
  •   lefticus    14 年前

    ChaiScript的最新SVN版本通过允许用户添加基类关系来解决这个问题。

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

        2
  •  0
  •   pedromateo    14 年前

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

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