AW: [odb-users] Object Model based on Interfaces
Lichtenberger, Christian
christian.lichtenberger at etm.at
Thu Jun 12 10:23:16 EDT 2014
I think this should be relatively easy to implement in ODB.
All you need is a own object_traits:
template <>
class WBE_REPOSITORY_EXPORT access::object_traits< ::IDerived > :
public access::object_traits< ::Derived >
{
};
And a cast in the object_traits_impl, which depends on the pointer type
First one I have tried, but second is not possible without modifying generated code.
One open question is how get the odb compiler the necessary information?
#pragma db object
#pragma db interface IDerived
Class Derived : Base, IDerived
{
}
Or
#pragma db interface
Class IDerived
{
}
Christian
-----Ursprüngliche Nachricht-----
Von: Boris Kolpackov [mailto:boris at codesynthesis.com]
Gesendet: Donnerstag, 12. Juni 2014 12:02
An: Lichtenberger, Christian
Cc: odb-users at codesynthesis.com
Betreff: Re: [odb-users] Object Model based on Interfaces
Hi Christian,
Lichtenberger, Christian <christian.lichtenberger at etm.at> writes:
> #pragma db object polymorphic
> class Base
> {
> //some base functionality
> }
>
> class IDerived
> {
> //define pure virtual functions
> }
>
> #pragma db object
> class Derived : public Base, public IDerived {
> //implements virtual functions
> }
>
> How can I archive that following is possible:
>
> main()
> {
> QSharedPointer<odb::database> db;
> IDerived derived = new Derived;
> db->persist<IDerived>(derived);
> }
To persist via IDerived you would have to make it a persistent object. But ODB does not support multiple inheritance. So the only way is to simplify this somehow into a single inheritance chain (e.g., derive Base from IDerived or the other way around).
Boris
More information about the odb-users
mailing list