2014-03-19 2 views
0

필자는 일부 Windows 라이브러리 함수에 대한 래퍼를 작성하고 있으므로 프로토 타입을 추출하고 수정 된 프로토 타입으로 새 래퍼를 작성해야합니다. 예를 들어 다음declutype of function of function

template <typename F> struct wrapper; 

template <typename R, typename T1, typename T2, typename T3, typename T4> 
struct wrapper<R(T1,T2,T3,T4)> 
{ 
    typedef R result_type; 
    typedef R (type)(T1,T2,T3,T4,THREADID); 
}; 

다음과 같은 포장 형태 작동 : 함수

int recv(SOCKET, char*, int, int) 

가 erroneousness을 방지하기 위해

recv_wrapper(SOCKET, char*, int, int, THREADID) 

에 의해 포장 될 것이다, 나는 래퍼 템플릿을 작성 :

typedef int recv_t(SOCKET,char*,int,int); 
typedef wrapper<recv_t>::type recv_wrapper_t; 
012 3,516,

하지만 더 자동으로 RECV의 종류 얻을 decltype를 사용하여 비트를 가고 싶어 :

typedef decltype(recv) recv_t; 
typedef wrapper<recv_t>::type recv_wrapper_t; 

을하지만이 작동하지 않습니다, 나는 그것을 수정하는 몇 가지 방법을 시도하지만, 난 항상 VS2010에서 오류가 컴파일러 :

error C2027: use of undefined type 'wrapper<F>' 
with 
     [ 
      F=int (SOCKET,char *,int,int) 
     ] 

error C2146: syntax error : missing ';' before identifier 'recv_wrapper_t' 

나는 그와 매우 좌절 때문에 여기 F는 아무것도하지만 recv_t는 명시 적으로 정의 :

typedef int recv_t(SOCKET,char*,int,int); 

을하지만 decltype 자동으로 그것을 얻을 때, 그것은 더 이상 작동하지 않습니다.

아무쪼록 고맙습니다.

N.B. n.m의 제안에 따라 오타 오류를 수정했습니다.; 하지만 여전히 작동하지 않습니다.

답변

1

template <typename F> wrapper;은 유효하지 않습니다. template <typename F> struct wrapper;을 찾으셨습니까? 이 문제를 해결하면 명확한 구문이 작동합니다.

typedef wrapper<decltype(recv)>::type recv_wrapper_t; 
+0

감사합니다. n.m ..이 템플릿은 템플릿 오류입니다. struct wrapper; –