c++ “std::函数〈void(int)>{}”的含义是什么

sirbozc5  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(103)

我是C++的新手,当我阅读node.js的源代码时,我看到了以下代码:

struct StartExecutionCallbackInfo {
  v8::Local<v8::Object> process_object;
  v8::Local<v8::Function> native_require;
};

using StartExecutionCallback =
    std::function<v8::MaybeLocal<v8::Value>(const StartExecutionCallbackInfo&)>;

LoadEnvironment(env, StartExecutionCallback{});

我的困惑是:StartExecutionCallback{}.
我想可以这样解读:

std::function<v8::MaybeLocal<v8::Value>(const StartExecutionCallbackInfo&)>{};

但它是什么意思?一个空函数指针?

x0fgdtte

x0fgdtte1#

您可能知道StartExecutionCallback是function [wrapper]对象的类型,接受const StartExecutionCallbackInfo&作为参数,并返回v8::MaybeLocal<v8::Value>
使用StartExecutionCallback{}创建了一个该类型的示例,但它实际上并不包含任何可调用对象(即函数 Package 器没有目标)。
所以是的,它有点类似于空函数指针。
接受此参数的LoadEnvironment可以检查它是实际的可调用对象还是空的可调用对象。尝试调用“空”std::function将导致std::bad_function_call异常。
下面的代码演示了这一点(简化版本):

#include <iostream>
#include <functional>

//...

std::function<void(int)> f{};
if (f)
{
    f(4);
}
else
{
    std::cout << "f is empty\n";
}

输出将为:

f is empty

相关问题