c++代码中void的奇怪用法
Strange use of void in c++ code
下面是一些关于c++异步任务的演示代码
template <class T> class Future<T>{
//something
void foo(std::function<void(T)> cb);
//something
};
void(T)
是什么意思?
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`
cb
是std::function
,其operator()
接受T
并返回void
。
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;
}
根据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是一个依赖类型,它依赖于模板形参。这样就可以在基于模板形参的函数中没有参数。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 这个指针在c++中的用法
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 对函数使用擦除-删除习惯用法<void(>
- void指针函数的用法
- c++中void指针的用法
- 函数体中变量强制转换为 void 的这种用法是什么?
- c++代码中void的奇怪用法