2013-04-03 73 views
1

我使用的V8 JavaScript引擎,并在C存储一些值++对象使用这样的:V8如何将v8 :: Persistent <v8 :: Primitive>转换为v8 :: Primitive?

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

我想使用保存的值来设置另一个原始和返回是这样的:

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; 
} 

第二行导致编译器错误: 二进制'=':找不到操作符找到类型'v8 :: Persistent'的右侧操作数(或没有可接受的转换)

如何获取原始VA从永恒的? 我试着解引用m_Value。没有运气。 这很简单...

回答

1

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

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

另外,根据您的情况,您可能要创建两个方法,一个是明确地输出本地手柄和另一输出一个持久句柄。或者你可以使用方法模板。