qicosmos / ormpp

modern C++ ORM, C++17, support mysql, postgresql,sqlite

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

是否可以加一个set_field_value的方法,便于通过某个字符串名称来设置对象相应成员的值

segeter opened this issue · comments

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();
}

不要意思,发错位置了,应该发到iguana下面的