unr*_*nal 6 c c++ typedef function-pointers
我正在一个线程池,并避免长限定符名称,我想使用typedef声明.
但它并不像看起来那么容易:
typedef unsigned ( __stdcall *start_address )( void * ) task;
Run Code Online (Sandbox Code Playgroud)
当我以这种方式尝试时,我得到了:
error C3646: 'task' : unknown override specifier
Run Code Online (Sandbox Code Playgroud)
错误,在用这个声明玩了一会儿之后我就卡住了,找不到任何合理的解决方案来用来声明这种类型的typedef.
pb2*_*b2q 15
typedef为函数指针创建别名时,别名位于函数名称位置,因此请使用:
typedef unsigned (__stdcall *task )(void *);
Run Code Online (Sandbox Code Playgroud)
task现在是一个类型别名:指向一个带void指针并返回的函数的指针unsigned.
由于hmjd的答案已被删除...
在C++ 11 中,已经开发了一个完整的newsome 别名语法,以使这些事情变得更容易:
using task = unsigned (__stdcall*)(void*);
Run Code Online (Sandbox Code Playgroud)
等效于typedef unsigned (__stdcall* task)(void*);(注意函数签名中间别名的位置...).
它也可以用于模板:
template <typename T>
using Vec = std::vector<T>;
int main() {
Vec<int> x;
}
Run Code Online (Sandbox Code Playgroud)
这种语法比旧语法更好(对于模板,实际上可以使模板别名成为可能),但确实需要一个非常新的编译器.