是否可以加一个set_field_value的方法,便于通过某个字符串名称来设置对象相应成员的值
segeter opened this issue · 1 comments
segeter commented
`template<typename T, typename V>
void set_field_value(T& to_obj, std::string_view to_field_name, const V& from_v)
{
using M = decltype(iguana_reflect_members(to_obj));
auto tp = M::apply_impl();
constexpr auto Size = M::value();
auto index = iguana::get_index(to_field_name);
tuple_switch(index, tp, [&](auto& v) {
using type_v = decltype(std::declval().*std::declval<decltype(v)>());
to_obj.*v = (type_v)from_v;
}, std::make_index_sequence{});
}
///////////////////////////////////////////////
struct person
{
std::string name;
int age = 0;
};
REFLECTION(person, age, name);
int main()
{
person p;
iguana::set_field_value(p, "name", "Tom");
iguana::set_field_value(p, "age", 20);
return getchar();
}`
qicosmos commented
看起来不错。