C++ 函数中的调用约定

C++ 函数中的调用约定,c++,function,boost,typetraits,C++,Function,Boost,Typetraits,我现在正在为Windows上的一些库调用编写包装。对于每个函数,我需要提取其原型并在包装器中重新应用它们,例如recv函数的包装器: int recv(SOCKET, char*, int, int); 可能是 int recv_wrapper(SOCKET, char*, int, int, <additional params>); 但它仍然不起作用,因为recv被自动翻译(在Winsock2.h中的某个地方)为: int(u stdcall*)(套接字,字符*,int,in

我现在正在为Windows上的一些库调用编写包装。对于每个函数,我需要提取其原型并在包装器中重新应用它们,例如recv函数的包装器:

int recv(SOCKET, char*, int, int);
可能是

int recv_wrapper(SOCKET, char*, int, int, <additional params>);
但它仍然不起作用,因为recv被自动翻译(在Winsock2.h中的某个地方)为:

int(u stdcall*)(套接字,字符*,int,int)

我需要的是
int(*)(SOCKET,char*,int,int)
int(SOCKET,char*,int,int)


非常感谢您的任何考虑

不确定您的要求是什么,但对于检查“功能特征”,这可能会有所帮助:(很抱歉,这里的帖子标题与您的标题不太相似)。非常感谢ῥεῖ, 虽然我看不出这个问题和我的问题有什么共同之处。这里我要问的是,如何在没有调用约定的情况下获得原型,即函数recv的int(SOCKET,char*,int,int)。我的链接只是展示了一种方法,可以检查您在编译时提到的那些调用约定。如果您有一些类/函数与您想要的签名匹配,那么检查应该通过,否则您将得到编译时错误。
typedef boost::function_traits<decltype(recv)> recv_traits;
recv_traits::result_type recv_wrapper(recv_traits::arg1_type, ...);
typedef decltype(recv) ptr_recv_t;
typedef boost::remove_pointer<ptr_recv_t> recv_t;
typedef boost::function_traits<recv_t> recv_traits;