[英]What is the syntax for a function-pointer typedef?
我正在开发一个线程池,并且为了避免长限定符名称,我想使用typedef
声明。
但它并不像看起来那么容易:
typedef unsigned ( __stdcall *start_address )( void * ) task;
当我以这种方式尝试时,我得到了:
error C3646: 'task' : unknown override specifier
错误,在使用此声明玩了一会儿之后我就卡住了,找不到任何合理的解决方案来用来声明这种类型的typedef
。
为函数指针创建typedef
别名时,别名位于函数名称位置,因此请使用:
typedef unsigned (__stdcall *task )(void *);
task
现在是一个类型别名: 指向一个带有void
指针并返回unsigned
的函数的指针 。
由于hmjd的答案已被删除...
在C ++ 11中,已经开发了一个完整的newsome 别名语法,以使这些事情变得更容易:
using task = unsigned (__stdcall*)(void*);
等同于typedef unsigned (__stdcall* task)(void*);
(注意函数签名中间别名的位置......)。
它也可以用于模板:
template <typename T>
using Vec = std::vector<T>;
int main() {
Vec<int> x;
}
这种语法比旧语法更好(对于模板,实际上可以使模板别名成为可能),但确实需要一个非常新的编译器。
旁注: __stdcall
部分可能会在不同的编译器/编译器设置下破坏您的代码(除非该函数也显式声明为__stdcall
)。 我只使用具有良好原因的专有编译器扩展来坚持默认的调用约定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.