我正在使用Visual Studion 2010,并给出了从WinGDI.h获得的以下示例函数:
__gdi_entry WINGDIAPI int WINAPI AbortDoc(__in HDC hdc);
有没有办法声明这种类型的函数指针,或者可能将它放入typedef中。例如:
AbortDoc() MyAbortDocPtr;
typedef AbortDoc AbortDocType;
显然这些语法在语法上是不正确的,并且不会编译,也许我想要完全不能完成。但是,有一种解决方案,您可以按照以下方式手动阻塞每个类型的设备:
typedef int (WINAPI *AbortDocType)( HDC hdc );
我已经习惯了这个,它对我有用,但是....
任何人都知道如何在typdef中使用预定义的函数声明,或者只是将原始声明用作typedef来声明一个新的函数指针?
答案 0 :(得分:2)
如果您使用的是GCC或clang,则可以使用typeof
:
typedef typeof(&AbortDoc) AbortDocType;
答案 1 :(得分:2)
您可以使用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__ *)