Я пытаюсь кодировать крошечный C ++ Sql ORM на основе шаблона проектирования Data Mapper.
Я играю с шаблоном и метапрограммирование, чтобы получить функции самоанализа. Я не могу сделать это после нескольких попыток ..
Из картографа я хотел бы сопоставить имена столбцов с помощью метода get из объекта, в котором я хочу сохранить.
Давайте посмотрим на пример:
class User
{
public :
int age() {
cout<<"int\n";
return 5;
}
float size(){
cout<<"float\n";
return 4.2;
}
};
Мне бы хотелось, чтобы класс Mapper позволил мне связать столбец с помощью метода:
Mapper<User> mapper;
mapper.bind("age", &User::age);
mapper.bind("size", &User::size);
Так что я могу написать в своей базе данных так:
Mapper::insert(User * user)
{
//bindNames = {"size", "age"}
for (const auto& field : bindsNames)
{
// Generate
Query q("INSERT into users (name, age) VALUES(:name, :age)");
q.repace(":size", (user->*readSizeFct)();
q.repace(":age", (user->*readAgeFct)();
}
}
После нескольких попыток основная проблема в том, что я не могу динамически хранить список указателей на функции с другой сигнатурой ...
Есть ли у вас какие-либо предложения, чтобы мой крошечный ORM работал?
Наверное, мне нужно прочитать документацию о шаблонном метапрограммировании ...