函数指针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
)。我会坚持默认的调用约定,只使用具有良好reaon的专有编译器扩展。
相关文章:
- C++避免重复声明的语法是什么
- 使用基类指针调用基类的值构造函数的语法是什么?
- 这行/语法是什么意思?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 将引用绑定到指针的语法是什么?(各种)
- 这个typedef和转换运算符语法是什么意思
- 此语法是什么意思.(::*).
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- 使用 pybind11 绑定 typedef 类型的正确语法是什么?
- 将此类传递给引用的正确语法是什么?
- 带有约束的可变参数模板的'requires'表达式的语法是什么?
- 在TensorFlow C++中用于feed_dict的语法是什么?
- 调用模板化类内的枚举类枚举器的正确语法是什么
- 返回没有 typedef 的成员函数指针的语法是什么?
- 将强制转换运算符重载到 std::map 的正确语法是什么
- 这种增量语法是什么意思
- 返回结构的方法的正确语法是什么
- C 中的(*)语法是什么意思
- 堆栈(int = 10),这个语法是什么意思(C++)
- variadic模板阵列参考参数的语法是什么?