Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Google V8中传递ObjectTemplate::New的第二个参数?_C++_V8 - Fatal编程技术网

C++ 如何在Google V8中传递ObjectTemplate::New的第二个参数?

C++ 如何在Google V8中传递ObjectTemplate::New的第二个参数?,c++,v8,C++,V8,我知道如何创建ObjectTemplate,我们可以对它做几件事。但我的问题不是关于那些众所周知的事情 我想知道如何传递第二个参数 正如官方指南所说: 每个函数模板都有一个关联的对象模板。这用于将使用此函数创建的对象配置为其构造函数 ObjectTemplate::New的第二个参数是FunctionTemplate键入的构造函数 顺便说一句,我知道访问器的用例等等,我只想知道如何使用第二个参数。在V8的API测试中有第二个ObjectTemplate::New参数的示例,位于: 如您所见,无需

我知道如何创建ObjectTemplate,我们可以对它做几件事。但我的问题不是关于那些众所周知的事情

我想知道如何传递第二个参数

正如官方指南所说:

每个函数模板都有一个关联的对象模板。这用于将使用此函数创建的对象配置为其构造函数

ObjectTemplate::New的第二个参数是FunctionTemplate键入的构造函数


顺便说一句,我知道访问器的用例等等,我只想知道如何使用第二个参数。

在V8的API测试中有第二个ObjectTemplate::New参数的示例,位于:

如您所见,无需通过FunctionTemplate间接实现属性创建,这就是ObjectTemplate的用途。请参见上面示例中的x和value属性


你提到的那句话是指别的。当您从FunctionTemplate实例化函数时,JavaScript代码可以将该函数用作构造函数。上述ObjectTemplate可用于配置将以这种方式创建的对象。

代码显示它与ObjectTemplate::Newisolate相同;因为fun几乎像第二个参数的默认值-Local。那么,如何为它指定一个特定的FunctionTemplate,而不仅仅是一个空的FunctionTemplate?FunctionTemplate在这里仅用于类名?re 1:fun是一个特定的FunctionTemplate,而不仅仅是空的。您可以在此处指定所需的任何函数模板。-re 2:是的,本例仅将其用于类名。我不知道它是否可以用于其他用途。
static Local<ObjectTemplate> New(Isolate *isolate, Local<FunctionTemplate> constructor = Local<FunctionTemplate>());
void Constructor(const FunctionCallbackInfo<Value>& args)
{
    // ...
}

Local<FunctionTemplate> _constructor = FunctionTemplate::New(isolate, Constructor);
Local<ObjectTemplate> tpl = ObjectTemplate::New(isolate, _constructor);
void Constructor(const FunctionCallbackInfo<Value>& args)
{
    Isolate* isolate = args.GetIsolate();
    args.This()->Set(String::NewFromUtf8(isolate, "value"), Number::New(isolate, 233));
    args.GetReturnValue().Set(args.This());
}
LocalContext env;
Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(isolate);
v8::Local<v8::String> class_name = v8_str("the_class_name");
fun->SetClassName(class_name);
Local<ObjectTemplate> templ1 = ObjectTemplate::New(isolate, fun);
templ1->Set(isolate, "x", v8_num(10));
templ1->Set(isolate, "value", v8_num(233));  // From your last snippet.
Local<v8::Object> instance1 =
    templ1->NewInstance(env.local()).ToLocalChecked();
CHECK(class_name->StrictEquals(instance1->GetConstructorName()));