typedef 在 C++ 中在其他人的 .h 头文件中声明的函数
typedef a function declared in someone else's .h header file in c++
我使用的是Visual Studion 2010,并给出了从WinGDI.h获得的以下示例函数:
__gdi_entry WINGDIAPI int WINAPI AbortDoc(__in HDC hdc);
有没有办法声明这种类型的函数指针,或者把它放在typedef中。例如:
AbortDoc() MyAbortDocPtr;
typedef AbortDoc AbortDocType;
很明显,这些语法不正确,不会编译,也许我想做的事情根本做不到。然而,有一种解决方案,你可以自己动手干扰每个typedef,如下所示:
typedef int (WINAPI *AbortDocType)( HDC hdc );
我用过这个,它确实对我有用,但是。。。。
- 它很乏味,尤其是如果你要做100个例程
- 因为它很乏味,很容易出错,而且你可能会得到一个错误的签名,直到边缘案例执行了错误的代码才知道
- 如果头文件中的基本签名发生变化,您有责任找出哪些签名发生了变化并进行更正。这意味着手工检查所有例程,而不是只获取新的头文件并重新编译
有人知道如何在typdfs中使用预定义的函数声明,或者简单地将原始声明用作typedef来声明新的函数指针吗
您可以使用decltype
来推导函数指针的类型。
#include <iostream>
#include <Windows.h>
#include <WinGDI.h>
typedef decltype(&AbortDoc) AbortDocType1;
typedef __gdi_entry WINGDIAPI int (WINAPI *AbortDocType2)( HDC hdc );
int main()
{
std::cout << typeid(AbortDocType1).name() << std::endl;
std::cout << typeid(AbortDocType2).name() << std::endl;
}
输出:
int (__stdcall*)(struct HDC__ *)
int (__stdcall*)(struct HDC__ *)
如果使用GCC或clang,则可以使用typeof
:
typedef typeof(&AbortDoc) AbortDocType;
相关文章:
- .cpp和.h文件中的模板专用化声明
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 用"=default"声明的函数应该只在头文件中执行
- 调用在 HXX 文件中声明的静态数据成员
- 如何在 c++ 的不同文件中声明类?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 为什么要将函数声明和定义放在单独的文件中
- 枚举前向声明与头文件
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 在带有类型保护的模板文件中使用前向声明
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 在多个头文件中从接口声明被覆盖的函数时,如何避免重复代码?
- 应该在类中的文件声明为静态
- 是否应从头文件声明中排除辅助函数?(C++)
- 哪个C++头文件声明 strlen
- 如何为头文件声明“#include”以避免“error lnk2005”
- 打开文件和关闭文件声明定位:最佳做法,优点,缺点
- 说双向文件声明不隐式设置标志是否正确