繁体   English   中英

函数指针typedef的语法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM