如何检查 chaiscript 中是否定义了函数以及如何使用类型化参数执行它
How can I check if a function is defined in the chaiscript and how can I execute it with typed arguments?
我刚刚发现了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) 参数传递给它呢?
任何帮助不胜感激!
这里似乎实际上有几个问题。
您可以使用 user_type
将类型名称添加到 ChaiScript,但仍需要添加要使用的任何方法。
由于您提到它们是模板化类型,因此我建议您在自己这边添加一个模板化函数,以便添加您想要的每个模板实例化。
是的,您是正确的,捕获异常会默默忽略函数不存在。但是,在实践中,如果您确实在每一帧上都这样做,则运行时将受到影响。抛出/捕获异常的成本很高。
对于如何将 vec4i 对象传递给函数,您有很多选择。例如,您想从C++还是在 ChaiScript 内部执行此操作?
一种选择是从C++以强类型方式执行此操作
auto func = chai.eval<std::function<void (const vec4i &)>>("onframe");
func(somevector);
我建议查看备忘单,看看它是否回答了剩余的问题。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 在c++构造函数中使用随机字符串生成器
- 如何在C++中的同一函数中使用字符串和双精度
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 对函数 PlaySound 使用字符串变量
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- C ++:在构造函数中使用参数包?
- c++ 在非类函数中使用类变量
- 函数如何使用引用返回所需的数字?
- 在 void 函数中使用 #include 变量C++
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 在构造函数中使用 lambda 的 C++ 类
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 在类构造函数中使用结构变量
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 在定义的函数中使用常量时出错
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在构造函数中使用可变参数初始化 std::tuple