我现在正在为Windows上的一些库调用编写包装器。对于每个函数,我需要提取其原型并在包装器中重新应用它们,例如recv函数的包装器:
int recv(SOCKET, char*, int, int);
可能是
int recv_wrapper(SOCKET, char*, int, int, <additional params>);
由于提取错误,我尝试使用boost function_traits来获取原始函数的参数,如:
typedef boost::function_traits<decltype(recv)> recv_traits;
recv_traits::result_type recv_wrapper(recv_traits::arg1_type, ...);
但这不起作用,因为decltype(recv)
是一个函数指针,因此我将其修改为:
typedef decltype(recv) ptr_recv_t;
typedef boost::remove_pointer<ptr_recv_t> recv_t;
typedef boost::function_traits<recv_t> recv_traits;
但它仍然无效,因为recv被自动转换(在Winsock2.h中的某个地方):
int(__stdcall *)(SOCKET,char *,int,int)
AFAIK我需要的是int (*)(SOCKET, char*, int, int)
或int(SOCKET, char*, int, int)
。
非常感谢您的任何考虑