gpt4 book ai didi

c++ - 通过用户类型对象为 Chaiscript 变量赋值会产生意外行为

转载 作者:行者123 更新时间:2023-11-28 06:36:36 25 4
gpt4 key购买 nike

我在使用 C++ 和 Chaiscript 时遇到了一个特殊问题,希望有人能帮助我,并且我会尽量提供所需的信息。

基本上,通过chaiscript调用一个用c++定义的c++函数,它返回一个Vector2对象(用户类型对象),当我试图直接从Vector2的成员变量(x或y)中获取一个值时,会返回疯狂的值.如果我将整个 Vector2 分配给一个变量,它将按预期工作,并且访问成员变量将给我预期的值。

我设法用尽可能少的代码重现了这个问题,摆脱了物理引擎和我使用的所有其他东西。

C++代码如下:

//test.cpp
#include <chaiscript/chaiscript.hpp>
#include <chaiscript/chaiscript_stdlib.hpp>

template<typename T>
struct Vector2
{
Vector2() : x(0), y(0) {};
Vector2(T px, T py) : x(px), y(py) {};
Vector2(const Vector2& cp) : x(cp.x), y(cp.y) {};

Vector2& operator+=(const Vector2& vec_r)
{
x += vec_r.x;
y += vec_r.y;
return *this;
}

Vector2 operator+(const Vector2& vec_r)
{
return Vector2(*this += vec_r);
}

void operator=(const Vector2& ver_r)
{
x = ver_r.x;
y = ver_r.y;
}


T x;
T y;
};

Vector2<float> GetValue()
{
return Vector2<float>(10,15);
}

int main()
{
chaiscript::ChaiScript _script(chaiscript::Std_Lib::library());

//Registering stuff
_script.add(chaiscript::user_type<Vector2<float>>(), "Vector2f");
_script.add(chaiscript::constructor<Vector2<float> ()>(), "Vector2f");
_script.add(chaiscript::constructor<Vector2<float> (float, float)>(), "Vector2f");
_script.add(chaiscript::constructor<Vector2<float> (const Vector2<float>&)>(), "Vector2f");
_script.add(chaiscript::fun(&Vector2<float>::x), "x");
_script.add(chaiscript::fun(&Vector2<float>::y), "y");
_script.add(chaiscript::fun(&Vector2<float>::operator +), "+");
_script.add(chaiscript::fun(&Vector2<float>::operator +=), "+=");
_script.add(chaiscript::fun(&Vector2<float>::operator =), "=");
_script.add(chaiscript::fun(&GetValue), "getValue");

_script.eval_file("test.chai");

return 0;
}

这是脚本:

//test.chai
var test = 0.0
var test2 = Vector2f(10,10)


test = getValue().x
print(test)
print(test2.x)

此代码将重现以下内容:6.52556e-3810

每次运行代码时,getValue().x (6.52556e-38) 的这个值实际上是不同的,但它通常是 1.f~8.f 之间的一些疯狂值,达到指数 -36~ -38.

我可以通过使用“var something = getValue()”然后访问“something.x”来解决这个问题,但是理解为什么会发生这种情况以及如何修复它会很有帮助。

最佳答案

这是 ChaiScript 中的一个错误,刚刚在 develop 分支上修复,将在下一个版本中修复。

https://github.com/ChaiScript/ChaiScript/commit/4f972bcf67826591423149c006f80d43a026bd15

关于c++ - 通过用户类型对象为 Chaiscript 变量赋值会产生意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com