在function_traits中调用约定

时间:2014-03-19 00:35:18

标签: c++ function boost typetraits

我现在正在为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)

非常感谢您的任何考虑

0 个答案:

没有答案