1 #ifndef TWrapperFunctions_h__
2 #define TWrapperFunctions_h__ 1
17 #if SUPPORT_VARIADIC_TEMPLATES
33 template <
typename className >
34 void CallSafeFunctionReturningVoid( className * ptr,
38 ( ptr->*Func )( error );
39 if ( error )
throw IError::MakeShared( error );
42 template<
typename className,
typename ... Ts >
43 void CallSafeFunctionReturningVoid( className * ptr,
44 void ( APICALL className::*Func )( Ts ...,
pcIError_base & ), Ts ... Vs )
47 ( ptr->*Func )( Vs ..., error );
48 if ( error )
throw IError::MakeShared( error );
65 template <
typename className >
66 void CallConstSafeFunctionReturningVoid(
const className *
const ptr,
70 ( ptr->*Func )( error );
71 if ( error )
throw IError::MakeShared( error );
74 template <
typename className,
typename ... Ts >
75 void CallConstSafeFunctionReturningVoid(
const className *
const ptr,
76 void ( APICALL className::*Func )( Ts ...,
pcIError_base & )
const, Ts ... Vs )
79 ( ptr->*Func )( Vs ..., error );
80 if ( error )
throw IError::MakeShared( error );
97 template <
typename className,
typename returnType,
typename internalReturnType >
98 returnType CallSafeFunction( className * ptr,
99 internalReturnType ( APICALL className::*Func )(
pcIError_base & ) )
102 internalReturnType returnValue = (ptr->*Func)( error );
103 if ( error )
throw IError::MakeShared( error );
105 #pragma warning( push )
106 #pragma warning( disable : 4800 )
108 return static_cast< returnType
>( returnValue );
110 #pragma warning( pop )
114 template <
typename className,
typename returnType,
typename internalReturnType,
typename ... Ts >
115 returnType CallSafeFunction( className * ptr,
116 internalReturnType ( APICALL className::*Func )( Ts ...,
pcIError_base & ), Ts ... Vs )
119 internalReturnType returnValue = (ptr->*Func)( Vs ..., error );
120 if ( error )
throw IError::MakeShared( error );
122 #pragma warning( push )
123 #pragma warning( disable : 4800 )
125 return static_cast< returnType
>( returnValue );
127 #pragma warning( pop )
145 template <
typename className,
typename returnType,
typename internalReturnType >
146 returnType CallConstSafeFunction(
const className *
const ptr,
147 internalReturnType ( APICALL className::*Func )(
pcIError_base & )
const )
150 internalReturnType returnValue = (ptr->*Func)( error );
151 if ( error )
throw IError::MakeShared( error );
153 #pragma warning( push )
154 #pragma warning( disable : 4800 )
156 return static_cast< returnType
>( returnValue );
158 #pragma warning( pop )
162 template <
typename className,
typename returnType,
typename internalReturnType,
typename ... Ts >
163 returnType CallConstSafeFunction(
const className *
const ptr,
164 internalReturnType ( APICALL className::*Func )( Ts ...,
pcIError_base & )
const, Ts ... Vs )
167 internalReturnType returnValue = (ptr->*Func)( Vs ..., error );
168 if ( error )
throw IError::MakeShared( error );
170 #pragma warning( push )
171 #pragma warning( disable : 4800 )
173 return static_cast< returnType
>( returnValue );
175 #pragma warning( pop )
193 template <
typename className,
typename internalReturnType,
typename sharedPo
interType >
194 shared_ptr< sharedPointerType > CallSafeFunctionReturningPointer( className * ptr,
195 internalReturnType ( APICALL className::*Func )(
pcIError_base & ) )
198 internalReturnType returnValue = (ptr->*Func)( error );
199 if ( error )
throw IError::MakeShared( error );
200 return sharedPointerType::MakeShared( returnValue );
203 template <
typename className,
typename internalReturnType,
typename sharedPointerType,
typename ... Ts >
204 shared_ptr< sharedPointerType > CallSafeFunctionReturningPointer( className * ptr,
205 internalReturnType ( APICALL className::*Func )( Ts ...,
pcIError_base & ), Ts ... Vs )
208 internalReturnType returnValue = ( ptr->*Func )( Vs ..., error );
209 if ( error )
throw IError::MakeShared( error );
210 return sharedPointerType::MakeShared( returnValue );
227 template <
typename className,
typename internalReturnType,
typename sharedPo
interType >
228 shared_ptr< sharedPointerType > CallConstSafeFunctionReturningPointer(
const className *
const ptr,
229 internalReturnType ( APICALL className::*Func )(
pcIError_base & )
const )
232 internalReturnType returnValue = (ptr->*Func)( error );
233 if ( error )
throw IError::MakeShared( error );
234 return sharedPointerType::MakeShared( returnValue );
237 template <
typename className,
typename internalReturnType,
typename sharedPointerType,
typename ... Ts >
238 shared_ptr< sharedPointerType > CallConstSafeFunctionReturningPointer(
const className *
const ptr,
239 internalReturnType ( APICALL className::*Func )( Ts ...,
pcIError_base & )
const, Ts ... Vs )
242 internalReturnType returnValue = ( ptr->*Func )( Vs ..., error );
243 if ( error )
throw IError::MakeShared( error );
244 return sharedPointerType::MakeShared( returnValue );
254 #endif // TWrapperFunctions_h__