c++函数指针语法
C++ function pointer syntax
我知道,一般来说,函数指针是这样声明的:
void __stdcall my_func(int i) {} // for assigning
void (__stdcall * my_ptr)(int) = &my_func;
现在我有几个函数以函数指针作为参数:
void calling_func(void (__stdcall * callback)(int)) { *callback(1); }
在头文件中,我只是删除了事物的名称:
void calling_func(void (__stdcall *)(int));
和瞧,那起作用了…并让我思考:如果这是一个完整的类型声明,不能使用正常的TYPE NAME = VALUE
语法也为函数指针?
我试图声明:
( void (__stdcall *)(int) ) callback = &my_func;
,它也编译!为什么不经常使用这个?这个符号有缺陷吗?对我来说,这似乎会大大简化函数指针的使用……也在类型中,例如:通常是typedef OLDNAME NEWNAME
,只是函数指针是这种奇怪的由内而外的语法,新名称实际上是在整个表达式的中间。更不用说返回函数指针的函数表示法了…
这不是一个声明,它是callback
的转换,然后赋值给。
你确定在作用域中没有预先存在的声明吗?
不适合我编译。这在c++中是无效的。
你可以假装的!
template <typename T>
struct identity {
typedef T type;
};
identity<void(*)(int)>::type callback = &my_func;
或者使用boost::function
(或std::function
)来获得最终的胜利。
我更喜欢typedef
函数指针,并且还没有遇到问题。
Typedef,如果我理解正确的话,并没有把一个新类型作为另一个类型的别名(这就是为什么size_t
和unsigned int
可以互换使用而不会引起编译器的抱怨,例如)。因此,对于经常使用的函数指针类型,类型定义使它们更容易使用。
对于函数指针类型,语法如下:
typedef IObject * (*CreateFunc )(int, Core *);
在内部使用所需的类型名称(与您现在所做的没有太大不同)。你可以指定大多数函数修饰符(__stdcall, __declspec等),它们就在* name
前面的括号里。
您可以很容易地调用,分配和获取这些值,以及将它们转换为void *
以传递(当类型未知时)。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- QMetaObject invokeMethod的基于函数指针的语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++语法差异:二维和一维数组(指针算术)
- C++中未命名函数指针的语法
- c++ 获取非语法使用"&"创建指针
- C++语法中的函数指针
- 存储函数指针的正确语法
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 非标准语法,使用 & 创建指向成员的指针
- 将引用绑定到指针的语法是什么?(各种)
- 如何使用二维语法访问指针
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 非标准语法使用 '&' 创建指向成员 C++ 的指针
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- C++指向函数声明语法的指针
- 难以理解指针语法C++
- 数组的语法指针C++