Очень хочется засунуть работу с СУБД в отдельный класс, чтобы основная
работа программы шла только с объектами типа
class Person
{
property<int> id;
property<std::string> name;
...
};
и не зависела от запросов, таблиц...
Но тут возникает проблема — как обозначить соответствие между именами
полей в таблице БД и членами класса.
Хочется, чтобы работало примерно следующим образом:
Person p;
property<int>& id = binder<p,"PersonID">;
property<std::string>& name = binder<p,"PersonName">;
То есть по экземпляру класса и строке нужно возвращать ссылку на член
этого класса.
И обратно:
std::string field_name = binder<p,p.id>
То есть по экземпляру класса и ссылке(?) на член возвращать стоку с
названием поля.
Пока я придумал делать только так:
---------------------------------------------------------------
template<class T>
class bounder
{
public:
prop_base& operator()(const std::string& fname, T& obj)
{
}
};
void f()
{
property<int>& id = b_cast<int>(p, "PersonID");
}
---------------------------------------------------------------
А как сделать наоборот(получить строку по члену класса) придумать не
могу. Единственное, что приходит на ум — использовать offsetof, но это
как-то неправильно с точки зрения ОП...
Может кто сталкивался с такими проблемами? Подскажите как быть...
Может я вообще не то делаю?