5

現在、SQLite データベースに接続する必要がある C++ アプリケーションを作成しています。私はライブラリを検索し、SOCI を見つけました。ストリームの構文とマッピングはとても素晴らしいです。しかし、私はそれに1つの問題があります:

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でも可能ですか?

4

1 に答える 1