我使用下面的代码来验证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类继承的方法。
我做错了什么?
发布于 2010-07-07 18:27:14
该问题的解决方法如下:
/// method binding
chai->add(chaiscript::fun<bool (QCheckBox *)>(&QCheckBox::isChecked), "isChecked");为了不将引用绑定到父方法,有必要指定绑定的方法属于QCheckBox类。
干杯!
发布于 2010-08-05 06:12:34
ChaiScript的最新SVN版本通过允许用户添加基类关系解决了这个问题。
chai.add(base_class<Base, Derived>());之后,继承的函数调用将按预期工作,而无需明确基类方法指针类型,如您的答案所示。
https://stackoverflow.com/questions/3193024
复制相似问题