5 #include <SFML/System/Vector2.hpp> 7 #include <NasNas/core/data/Rect.hpp> 11 #define NS_DEFINE_HAS_METHOD(name, signature) \ 12 template<typename, typename T=signature> \ 13 struct has_##name {}; \ 14 template<typename C, typename Ret, typename... Args> \ 15 struct has_##name<C, Ret(Args...)> { \ 17 template <typename Rt> \ 18 using remove_const_ref = remove_const_t<remove_reference_t<Rt>>; \ 19 template<typename T> \ 20 static constexpr auto check(T*) -> \ 21 enable_if_t<is_base_of_v< \ 22 remove_const_ref<decltype(declval<T>().name(declval<Args>()...))>,\ 23 remove_const_ref<Ret> \ 25 template<typename> static constexpr false_type check(...); \ 26 using type = decltype(check<C>(0)); \ 28 static constexpr bool value = type::value; \ 30 template <typename C, typename T=signature> \ 31 inline constexpr bool has_##name##_v = has_##name<C, T>::value 33 NS_DEFINE_HAS_METHOD(getPosition, sf::Vector2f());
36 NS_DEFINE_HAS_METHOD(update,
void());