1#ifndef NEFORCE_CORE_REFLECT_FUNCTION_HPP__
2#define NEFORCE_CORE_REFLECT_FUNCTION_HPP__
14NEFORCE_BEGIN_NAMESPACE__
15NEFORCE_BEGIN_REFLECT__
66 return invoker_(
move(obj), args);
83 NEFORCE_NODISCARD
size_t min_args()
const {
return min_args_; }
89 NEFORCE_NODISCARD
size_t max_args()
const {
return max_args_; }
108template <
typename Ret,
typename Class,
typename... Args,
size_t... Is>
110 return (obj->*func)(args[Is].template convert<Args>()...);
113template <
typename Ret,
typename Class,
typename... Args,
size_t... Is>
116 return (obj->*func)(args[Is].template convert<Args>()...);
120decltype(
auto) make_member_invoker(Ret (Class::*func)(Args...)) {
122 if (
sizeof...(Args) != args.
size()) {
125 inner::invoke_impl(
static_cast<Class*
>(obj), func, args,
make_index_sequence<
sizeof...(Args)>{});
126 return reflect::meta_any{};
131decltype(
auto) make_member_invoker(Ret (Class::*func)(Args...)) {
133 if (
sizeof...(Args) != args.
size()) {
136 auto result = inner::invoke_impl(
static_cast<Class*
>(obj), func, args,
make_index_sequence<
sizeof...(Args)>{});
137 return reflect::meta_any(result);
142decltype(
auto) make_const_member_invoker(Ret (Class::*func)(Args...)
const) {
144 if (
sizeof...(Args) != args.
size()) {
147 inner::invoke_impl(
static_cast<const Class*
>(obj), func, args,
make_index_sequence<
sizeof...(Args)>{});
148 return reflect::meta_any{};
153decltype(
auto) make_const_member_invoker(Ret (Class::*func)(Args...)
const) {
155 if (
sizeof...(Args) != args.
size()) {
159 inner::invoke_impl(
static_cast<const Class*
>(obj), func, args,
make_index_sequence<
sizeof...(Args)>{});
160 return reflect::meta_any(result);
165decltype(
auto) make_static_invoker(Ret (*func)(Args...)) {
167 if (
sizeof...(Args) != args.
size()) {
170 auto result = inner::invoke_impl(
nullptr, func, args,
make_index_sequence<
sizeof...(Args)>{});
171 return reflect::meta_any(result);
176decltype(
auto) make_static_invoker(Ret (*func)(Args...)) {
178 if (
sizeof...(Args) != args.
size()) {
181 auto result = inner::invoke_impl(
nullptr, func, args,
make_index_sequence<
sizeof...(Args)>{});
182 return reflect::meta_any(result);
188NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 size_type size() const noexcept
获取当前元素数量
constexpr const T & max(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(a, b)))
返回两个值中的较大者
constexpr const T & min(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(b, a)))
返回两个值中的较小者
integer_sequence< size_t, Values... > index_sequence
索引序列
make_integer_sequence< size_t, Size > make_index_sequence
生成指定长度的索引序列
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名