V8如何将v8 :: Persistent <v8 :: primitive>转换为v8 :: Primitive?</v8 :: primitive>

时间:2013-04-03 05:27:10

标签: v8

我正在使用V8 javascript引擎并使用以下方法将一些值存储在C ++对象中:

v8::Persistent<v8::Primitive>  m_Value;

我想使用保存的值来设置另一个Primitive并返回如下:

bool 
MyClass::Convert(v8::Primitive& oValue)
{
   oValue.Clear();  //<--Is Not a value method for Primitive. How can I clear it or set it to Null or Undefined?
   oValue= m_Value;
}

第二行会导致编译错误: binary'=':找不到带有'v8 :: Persistent'类型右手操作数的运算符(或者没有可接受的转换)

如何从Persistent中取回Primitive值? 我试图取消引用m_Value。没运气。 这很简单...

1 个答案:

答案 0 :(得分:1)

由于V8原语是垃圾收集的,因此您必须通过句柄访问它们。在您的代码中,m_Value是句柄,但您的方法的输出也应该是句柄:

bool
MyClass::Convert(Handle<Primitive>& oValue)
{
    oValue = Local<Primitive>::New(m_Value);
    return true;
}

此外,根据您的方案,您可能希望创建两个方法,一个显式输出本地句柄,另一个输出持久句柄。或者您可以使用方法模板。