Skip to content

Commit e53b762

Browse files
authored
Merge pull request #341 from qicosmos/add_index_of
2 parents e69a7e7 + 7bd7da6 commit e53b762

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

iguana/ylt/reflection/member_value.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,13 @@ inline size_t index_of(T& t, Field& value) {
176176
return std::distance(offset_arr.begin(), it);
177177
}
178178

179+
template <typename Member>
180+
inline size_t index_of(Member member) {
181+
using T = typename member_traits<Member>::owner_type;
182+
static auto& t = internal::get_fake_object<T>();
183+
return index_of(t, t.*member);
184+
}
185+
179186
template <typename T, typename Field>
180187
inline constexpr std::string_view name_of(T& t, Field& value) {
181188
size_t index = index_of(t, value);

test/test_reflection.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,11 @@ TEST_CASE("test macros") {
374374
constexpr auto idx2 = index_of<&simple2::id>();
375375
static_assert(idx2 == 1);
376376

377+
auto i = index_of(&simple::id);
378+
CHECK(i == 1);
379+
i = index_of(&simple::age);
380+
CHECK(i == 3);
381+
377382
constexpr auto arr = get_member_names<simple2>();
378383
static_assert(arr.size() == 4);
379384
constexpr auto map = member_names_map<simple2>;

0 commit comments

Comments
 (0)