0
我正在關注V8的Embedder's Guide以從JavaScript調用C++。我在設置訪問器時遇到錯誤。具體來說,下面的代碼在VS2015當前版本的V8下無法編譯。將C++函數綁定到V8時調用SetAccessor時出錯
point_templ.SetAccessor(String::NewFromUtf8(isolate, "x"), GetPointX, SetPointX);
我能得到它的工作大多預期,如果我將其更改爲:
point_templ->SetAccessor(String::NewFromUtf8(isolate, "x"), GetPointX);
我只是不能讓它接受setter函數。我收到一個錯誤,指出「沒有重載函數的實例」v8 :: ObjectTemplate :: SetAccessor「與參數列表匹配」。爲了記錄,我沒有修改指南中的示例函數。他們是以下內容(從指南複製):
void GetPointX(Local<String> property, const PropertyCallbackInfo<Value>& info)
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
void* ptr = wrap->Value();
int value = static_cast<Point*>(ptr)->x_;
info.GetReturnValue().Set(value);
}
void SetPointX(Local<String> property, Local<Value> value, const PropertyCallbackInfo<Value>& info)
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
void* ptr = wrap->Value();
static_cast<Point*>(ptr)->x_ = value->Int32Value();
}
設置員所需的函數簽名是否與指南中的不同?