【发布时间】:2017-02-15 22:06:47
【问题描述】:
目前我正在编写一个必须连接到 SQLite 数据库的 C++ 应用程序。我搜索了一个图书馆,发现了 SOCI,我不得不说:我喜欢它。流语法和映射非常棒。但我有一个问题:
我有一个 Event 类,我已经为它编写了解析器函数:
template<> struct type_conversion<Event>
{
typedef values base_type;
static void from_base(const values& v, indicator /* ind */, Event& event)
{
event.m_id = v.get<std::string>("id");
event.m_title = v.get<std::string>("Title");
event.m_description = v.get<std::string>("Description");
event.m_date = v.get<std::tm>("Date");
}
static void to_base(const Event& event, values& v, indicator& ind)
{
v.set("id", event.m_id);
v.set("Title", event.m_title);
v.set("Description", event.m_description);
v.set("Date", event.m_date);
ind = i_ok;
}
};
这非常适合这样的查询:
sql << "SELECT * FROM Event WHERE id=5", into(event);
我想在std::vector<Event*> 中选择大量事件,但如果我尝试这样做:
std::vector<Event*> events;
sql << "SELECT * FROM Event", into(events)
但是这样我得到以下编译器错误:
No known convertation from
soci::details::conversion_into_type<std::vector<Event>> into
soci::details::into_type_base
SOCI 不可能做到这一点,还是我错过了什么?我还发现 OTL 作为库。这可能是一个不错的选择吗?正如我所说,我喜欢 SOCI 方式。 OTL 也可以实现类似的功能吗?
【问题讨论】: