Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

72 Zeilen
1.6 KiB

  1. #pragma once
  2. #include <cpphibernate/config.h>
  3. #include <cpphibernate/misc/general.h>
  4. #include <cpphibernate/schema/field.h>
  5. beg_namespace_cpphibernate_schema
  6. {
  7. namespace __impl
  8. {
  9. /* fields_t */
  10. template<typename... T_fields>
  11. using fields_t = hana::tuple<T_fields...>;
  12. /* is_fields_impl */
  13. template<typename T, typename = void>
  14. struct is_fields_impl
  15. : public mp::c_false_t
  16. { };
  17. template<typename... T>
  18. struct is_fields_impl<fields_t<T...>, mp::enable_if<all_are_fields<T...>>>
  19. : public mp::c_true_t
  20. { };
  21. }
  22. /* meta */
  23. template<typename T>
  24. struct is_fields :
  25. public __impl::is_fields_impl<T>
  26. { };
  27. /* operations */
  28. namespace __impl
  29. {
  30. /* fields_make_impl */
  31. template <typename T, typename = void>
  32. struct fields_make_impl
  33. {
  34. template <typename ...T_args>
  35. static constexpr decltype(auto) apply(T_args&&... args)
  36. { static_assert(sizeof...(args) == -1, "Invalid parameters for hibernate::schema::fields::make(...)!"); }
  37. };
  38. template<typename... T>
  39. struct fields_make_impl<mp::list<T...>, mp::enable_if<all_are_fields<T...>>>
  40. {
  41. template <typename ...T_args>
  42. static constexpr decltype(auto) apply(T_args&&... args)
  43. { return fields_t<T_args...>(std::forward<T_args>(args)...); }
  44. };
  45. }
  46. namespace fields
  47. {
  48. constexpr decltype(auto) make = misc::make_generic_predicate<__impl::fields_make_impl> { };
  49. }
  50. }
  51. end_namespace_cpphibernate_schema