以下是关于C ++中异步任务的演示文稿中的一些代码
template <class T> class Future<T>{
//something
void foo(std::function<void(T)> cb);
//something
};
void(T)
是什么意思?
答案 0 :(得分: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
在这种情况下,函数类型用于指定std::function
的函数调用运算符的签名:
void operator()(T);
这样函数对象就可以像使用该类型的函数一样使用:
T some_t;
cb(some_t); // usable like a function taking `T`
答案 1 :(得分:6)
cb
是std::function
,其operator()
需要T
并返回void
。
答案 2 :(得分:1)
void(T)是函数签名(类型)
注意签名不是指向函数的指针,不是指向成员函数的指针而不是lambda:
#include<functional>
void a(int) {}
struct B {
void f(int) {}
};
int main() {
std::function<void(int)> fn;
fn = a;
B b;
fn = std::bind(&B::f, b, std::placeholders::_1);
auto lambda = [](int) {};
fn = lambda;
}
答案 3 :(得分:0)
基于C ++ 11规范,解释如下:A parameter list consisting of a single unnamed parameter of non-dependent type void is equivalent to an empty parameter list.
void不是函数的有效参数类型,但是void(T)中的T是依赖类型,它取决于模板参数。这样,您可以根据模板的参数在函数中没有参数。