class_member_traits.hpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // class_member_traits.hpp
  3. // Contains specializations of the class_member_traits\<\> class template.
  4. //
  5. // Copyright 2008 Eric Niebler. Distributed under the Boost
  6. // Software License, Version 1.0. (See accompanying file
  7. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  8. template<typename T, typename U >
  9. struct class_member_traits<T (U::*)()>
  10. {
  11. typedef U class_type;
  12. typedef T result_type;
  13. };
  14. template<typename T, typename U >
  15. struct class_member_traits<T (U::*)() const>
  16. {
  17. typedef U class_type;
  18. typedef T result_type;
  19. };
  20. template<typename T, typename U , typename A0>
  21. struct class_member_traits<T (U::*)(A0)>
  22. {
  23. typedef U class_type;
  24. typedef T result_type;
  25. };
  26. template<typename T, typename U , typename A0>
  27. struct class_member_traits<T (U::*)(A0) const>
  28. {
  29. typedef U class_type;
  30. typedef T result_type;
  31. };
  32. template<typename T, typename U , typename A0 , typename A1>
  33. struct class_member_traits<T (U::*)(A0 , A1)>
  34. {
  35. typedef U class_type;
  36. typedef T result_type;
  37. };
  38. template<typename T, typename U , typename A0 , typename A1>
  39. struct class_member_traits<T (U::*)(A0 , A1) const>
  40. {
  41. typedef U class_type;
  42. typedef T result_type;
  43. };
  44. template<typename T, typename U , typename A0 , typename A1 , typename A2>
  45. struct class_member_traits<T (U::*)(A0 , A1 , A2)>
  46. {
  47. typedef U class_type;
  48. typedef T result_type;
  49. };
  50. template<typename T, typename U , typename A0 , typename A1 , typename A2>
  51. struct class_member_traits<T (U::*)(A0 , A1 , A2) const>
  52. {
  53. typedef U class_type;
  54. typedef T result_type;
  55. };
  56. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3>
  57. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3)>
  58. {
  59. typedef U class_type;
  60. typedef T result_type;
  61. };
  62. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3>
  63. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3) const>
  64. {
  65. typedef U class_type;
  66. typedef T result_type;
  67. };
  68. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  69. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4)>
  70. {
  71. typedef U class_type;
  72. typedef T result_type;
  73. };
  74. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  75. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4) const>
  76. {
  77. typedef U class_type;
  78. typedef T result_type;
  79. };
  80. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  81. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5)>
  82. {
  83. typedef U class_type;
  84. typedef T result_type;
  85. };
  86. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  87. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5) const>
  88. {
  89. typedef U class_type;
  90. typedef T result_type;
  91. };
  92. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  93. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
  94. {
  95. typedef U class_type;
  96. typedef T result_type;
  97. };
  98. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  99. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6) const>
  100. {
  101. typedef U class_type;
  102. typedef T result_type;
  103. };
  104. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  105. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
  106. {
  107. typedef U class_type;
  108. typedef T result_type;
  109. };
  110. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  111. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7) const>
  112. {
  113. typedef U class_type;
  114. typedef T result_type;
  115. };
  116. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  117. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
  118. {
  119. typedef U class_type;
  120. typedef T result_type;
  121. };
  122. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  123. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8) const>
  124. {
  125. typedef U class_type;
  126. typedef T result_type;
  127. };
  128. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  129. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
  130. {
  131. typedef U class_type;
  132. typedef T result_type;
  133. };
  134. template<typename T, typename U , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  135. struct class_member_traits<T (U::*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9) const>
  136. {
  137. typedef U class_type;
  138. typedef T result_type;
  139. };