returnType.h

Engine/source/util/returnType.h

Helper templates to determine the return type of functions.

More...

Classes:

Detailed Description

Helper templates to determine the return type of functions.

 1
 2//-----------------------------------------------------------------------------
 3// Copyright (c) 2012 GarageGames, LLC
 4//
 5// Permission is hereby granted, free of charge, to any person obtaining a copy
 6// of this software and associated documentation files (the "Software"), to
 7// deal in the Software without restriction, including without limitation the
 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 9// sell copies of the Software, and to permit persons to whom the Software is
10// furnished to do so, subject to the following conditions:
11//
12// The above copyright notice and this permission notice shall be included in
13// all copies or substantial portions of the Software.
14//
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21// IN THE SOFTWARE.
22//-----------------------------------------------------------------------------
23
24#ifndef _UTIL_RETURNTYPE_H_
25#define _UTIL_RETURNTYPE_H_
26
27/// @file
28///
29/// Helper templates to determine the return type of functions.
30
31template <class R> struct ReturnType { typedef void ValueType; };
32
33template <class R,class A,class B,class C,class D,class E,class F,class G>
34struct ReturnType<R (*)(A,B,C,D,E,F,G)> { typedef R ValueType; };
35template <class R,class A,class B,class C,class D,class E,class F>
36struct ReturnType<R (*)(A,B,C,D,E,F)> { typedef R ValueType; };
37template <class R,class A,class B,class C,class D,class E>
38struct ReturnType<R (*)(A,B,C,D,E)> { typedef R ValueType; };
39template <class R,class A,class B,class C,class D>
40struct ReturnType<R (*)(A,B,C,D)> { typedef R ValueType; };
41template <class R,class A,class B,class C>
42struct ReturnType<R (*)(A,B,C)> { typedef R ValueType; };
43template <class R,class A,class B>
44struct ReturnType<R (*)(A,B)> { typedef R ValueType; };
45template <class R,class A>
46struct ReturnType<R (*)(A)> { typedef R ValueType; };
47template <class R>
48struct ReturnType<R (*)()> { typedef R ValueType; };
49
50template <class R,class O,class A,class B,class C,class D,class E,class F,class G>
51struct ReturnType<R (O::*)(A,B,C,D,E,F,G)> { typedef R ValueType; };
52template <class R,class O,class A,class B,class C,class D,class E,class F>
53struct ReturnType<R (O::*)(A,B,C,D,E,F)> { typedef R ValueType; };
54template <class R,class O,class A,class B,class C,class D,class E>
55struct ReturnType<R (O::*)(A,B,C,D,E)> { typedef R ValueType; };
56template <class R,class O,class A,class B,class C,class D>
57struct ReturnType<R (O::*)(A,B,C,D)> { typedef R ValueType; };
58template <class R,class O,class A,class B,class C>
59struct ReturnType<R (O::*)(A,B,C)> { typedef R ValueType; };
60template <class R,class O,class A,class B>
61struct ReturnType<R (O::*)(A,B)> { typedef R ValueType; };
62template <class R,class O,class A>
63struct ReturnType<R (O::*)(A)> { typedef R ValueType; };
64template <class R,class O>
65struct ReturnType<R (O::*)()> { typedef R ValueType; };
66
67#endif
68