【发布时间】:2018-09-03 22:10:42
【问题描述】:
我正在尝试基于 Data Mapper 设计模式编写一个小型 C++ Sql ORM。 我正在使用模板和元编程来获得内省功能。试了几次还是不行。。
在映射器中,我想用 getter 方法从我想要存储的对象中映射列名。
让我们看一个例子:
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 工作吗? 我想我必须阅读有关模板元编程的文档...
【问题讨论】:
-
类似question 使用
std::function。
标签: c++ templates orm metaprogramming function-pointers