Zeit eine Funktion mit der folgenden Ich Bindung:V8 - Casting args.Data() zurück
global->Set(String::NewFromUtf8(isolate, "print", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, V8Instance::js_print));
Mit der Funktion:
static void js_print(const v8::FunctionCallbackInfo<v8::Value> &args);
Umsetzung:
void V8Instance::js_print(const v8::FunctionCallbackInfo<v8::Value> &args) {
for (int i = 0; i < args.Length(); i++) {
v8::HandleScope handle_scope(args.GetIsolate());
v8::String::Utf8Value str(args[i]);
std::cout << *str << std::endl;
}
std::cout << std::endl;
}
Allerdings möchte ich meine js_print-Funktion Zugriff auf eine Variable, die ein Mitglied der Klasse V8Instance ist. Hat V8 etwas, das in der Lage ist, boost::bind(&Class::function, this, ...)
zu verwenden, das mich Elementfunktionen binden kann, oder gibt es eine Möglichkeit, die Variable, die ich benötige, durch Verweis/Zeiger an js_print
jedes Mal zu übergeben, wenn es aufgerufen wird?
aktualisieren
ich herausgefunden haben, dass ich die Datenparameter von FunctionTemplate::New
einen Zeiger auf meiner Klasse passieren kann mit:
Local<External> self = External::New(isolate, (void *) this);
global->Set(String::NewFromUtf8(isolate, "print", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, V8Instance::js_print, self));
Das kann ich Zugriff auf meine js_print
Funktion args.Data()
aber kehrt Local<Value>
Objekt, das ich nicht sicher bin, wie zu void *
zurückgeworfen werden und dann zurück zu meinem Klassenzeiger, V8Instance *
. Weiß jemand, wie man das macht?
Ich fragte an der Gruppe v8 Google und anscheinend kann ich nur einen Zeiger auf meiner Klasse als Daten in der 'FunctionTemplate' passieren Ich habe herausgefunden, wie dies zu tun mit (3. Argument.) Folgendes: 'Local self = External :: New (isolieren, (void *) this);' und dann übergeben 'selbst' als das dritte Argument, aber ich kann nicht herausfinden, wie zu konvertieren 'args.Data() '(in' js_print') zurück zu 'V8Instance *' –
Jack
Hinzugefügt Update in meiner Antwort. – pmed
Danke, ja, genau das habe ich gesucht. Marked correct – Jack