函数指针typedef的语法是什么

What is the syntax for a function-pointer typedef?

本文关键字:语法 是什么 typedef 指针 函数      更新时间:2023-10-16

我正在处理一个线程池,为了避免长的限定符名称,我希望使用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)。我会坚持默认的调用约定,只使用具有良好reaon的专有编译器扩展。