[odb-users] How to define odb::section for a member defined in
base class
Boris Kolpackov
boris at codesynthesis.com
Sat Jan 13 08:03:38 EST 2018
Vladimir Yelnikov <vladimir.yelnikov at gmail.com> writes:
> I would like to declare a derived class demo2 with section tied with
> base member data but ODB compiler can't generate proper code with
> error pointing last pragma:
>
> error: ')' expected at the end of db pragma section
>
> [...]
>
> #pragma db member(demo2::data) type("BLOB") section(demo2::dataSection)
Quoting the manual (emphasis added):
"The section specifier indicates that a data member of a persistent class
belongs to an object section. The single required argument to this specifier
is the name of the section data member. This specifier can only be used on
*direct data members* of a persistent class."
> Is it possible to make things work?
You can use a virtual data member:
#include <deque>
#include <odb/section.hxx>
struct demo
{
typedef std::deque<float> data_type;
data_type data;
int dummy;
};
struct demo2 : public demo
{
int id;
odb::section dataSection;
};
#pragma db object(demo) definition abstract
#pragma db member(demo::data) transient
#pragma db object(demo2)
#pragma db member(demo2::id) id
#pragma db member(demo2::dataSection) load(lazy)
#pragma db member(demo2::data_) virtual(demo::data_type) access(data) type("BLOB") section(dataSection)
Note that I've added a dummy non-transient data member to demo. If it
only needs to contain data, then you can make the whole demo class a
transient base (i.e., simply don't declare it as persistent).
Boris
More information about the odb-users
mailing list