在c ++代码中奇怪地使用void

tty*_*ty6 2 c++ std

以下是关于C++中异步任务的演示文稿中的一些代码

template <class T> class Future<T>{
  //something
  void  foo(std::function<void(T)> cb);    
  //something
};
Run Code Online (Sandbox Code Playgroud)

什么void(T)意思?

Mik*_*our 7

什么void(T)意思?

这指定了一个函数类型; 具体来说,一个函数采用类型的单个参数T,并且不返回任何内容.通常,复杂类型的类型说明符看起来像它们对应的变量声明,但没有变量名称:

void f(T); // declare a function
void(T)    // specifier for a function type

int a[42]; // declare an array
int[42]    // specifier for an array type
Run Code Online (Sandbox Code Playgroud)

在这种情况下,函数类型用于指定函数调用运算符的签名std::function:

void operator()(T);
Run Code Online (Sandbox Code Playgroud)

这样函数对象可以像使用该类型的函数一样使用:

T some_t;
cb(some_t); // usable like a function taking `T`
Run Code Online (Sandbox Code Playgroud)


dlf*_*dlf 6

cbstd::functionoperator()需要T和回报void.