奇怪的C ++语法:函数调用之前的类型定义

时间:2016-11-18 04:14:38

标签: c++ syntax

我正在阅读NodeJS和V8源代码,特别是node_contextify.cc文件,我无法理解以下内容:

Context::Scope context_scope(debug_context);

在看似函数调用之前,我不明白Context::Scope是什么。我不认为这是一个声明,因为它是一个功能代码,还有一个if和其他电话。

完成相关代码:

...
    if (debug_context.IsEmpty()) {
        // [... lines removed for brevity ...]
    }
    Context::Scope context_scope(debug_context);
    MaybeLocal<Script> script = Script::Compile(debug_context, script_source);
    if (script.IsEmpty())
        return;  // Exception pending.
    args.GetReturnValue().Set(script.ToLocalChecked()->Run());
}
...

Context::Scope的含义是什么?

更多信息:

文件:node/node_contextify.cc(第268行突出显示)。

虽然我知道这是一个关于语法的基本问题,但我甚至不知道如何调用它,所以我无法在Google,StackOverflow或C ++参考中找到任何结果。

问题标题是我搜索时的尝试之一。

2 个答案:

答案 0 :(得分:3)

使用debug_context初始化context_scope变量。 Context :: Scope是类型(这里是一个参考页面http://bespin.cz/~ondras/html/classv8_1_1Context_1_1Scope.html

这是关于使用Context :: Scope How to correctly use Context::Scope ?

的另一篇文章 顺便说一句,即使你不知道该怎么称呼它,搜索&#34; v8 Context :: Scope&#34;会发现信息。

答案 1 :(得分:2)

Context::Scope context_scope(debug_context);

您要声明context_scope类型的对象Context::Scope,并使用debug_context初始化它 Context::Scope可以是类或结构中定义的类型,例如:

class Context {
public:
    using Scope = int;
    ....
}

或,Context::Scope可以是在命名空间内定义的类型,例如:

namespace Context {
    using Scope = int;
    ...
}