我刚刚发现了chaiscript,我非常喜欢它。 现在我想添加对我非常简单的opengl 3d引擎的支持。
我有C ++数学类:vec2T,vec3T,vec4T,mat2T,mat3T,mat4T,......(它们实际上是模板类,有些typedef使它们成为vec4i,vec4f,vec4d,...)
我想我可以将它们添加到chaiscript中:
chai.add(chaiscript::user_type<vec4i>(), "vec4i");
正确?
现在,我想测试我的脚本是否包含一个名为“onFrame”的函数。如果是,我希望用vec4i参数作为第一个参数调用它。 我该怎么做?
我知道我可以这样做:
try
{
chai("onFrame();");
}
catch (const std::exception &)
{
}
如果脚本中未定义onFrame,则会以这种方式忽略该异常。我甚至可以通过这种方式传递一些整数或字符串参数。 但是我如何继续传递vec4(x,y,z,w)参数?
感谢任何帮助!
答案 0 :(得分:3)
这里似乎有几个问题。
您可以使用user_type
将类型名称添加到ChaiScript,但仍需要添加要使用的任何方法。
由于您提到它们是模板化类型,我建议您添加一个模板化函数,以便为您添加每个模板实例化。
是的,你是正确的,捕获异常会默默地忽略一个函数不存在。但是,在实践中,如果您在每个帧上实际执行此操作,您的运行时将受到影响。抛出/捕获异常是很昂贵的。
关于如何将vec4i对象传递给函数,您有很多选择。你想用C ++或ChaiScript内部吗?
一种选择是从C ++
以强类型方式进行auto func = chai.eval<std::function<void (const vec4i &)>>("onframe");
func(somevector);
我建议查看cheatsheet以查看是否能回答剩下的问题。