首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过用户类型对象给Chaiscript变量赋值会给出意想不到的行为

通过用户类型对象给Chaiscript变量赋值会给出意想不到的行为
EN

Stack Overflow用户
提问于 2014-10-31 15:27:27
回答 1查看 1.3K关注 0票数 0

我对C++和Chaiscript有一个特殊的问题,希望有人能帮我解决这个问题,我会尽可能多地提供它所需要的信息。

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

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

以下是c++代码:

代码语言:javascript
复制
//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;
}

下面是剧本:

代码语言:javascript
复制
//test.chai
var test = 0.0
var test2 = Vector2f(10,10)


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

此代码将复制以下内容: 6.52556e-38 10

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 01:24:13

这是ChaiScript中的一个bug,它刚刚修复在develop分支上,并将出现在下一个版本中。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26678159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档