diff --git a/Database/TPTools/TPTools/TPConverter.h b/Database/TPTools/TPTools/TPConverter.h index 6eda8c220b5142a6b7bdd3efeea6d6a4ae5a619f..0c973e8ed98146b0b2563a1689515b24808c6857 100644 --- a/Database/TPTools/TPTools/TPConverter.h +++ b/Database/TPTools/TPTools/TPConverter.h @@ -470,6 +470,25 @@ protected: // -------------------------------------------------------------- +namespace TPCnv { + +/** @class TPCnv::CreateTransient + Helper class to make specializing the creation of transient objects + in the TPConverterBase::createTransient() easier. + + Provide specialization before definition of your T/P converter for transient typeTRANS + The final T/P converter can still overwrite its whole createTransient() method +*/ + template<class TRANS> + class CreateTransient { + public: + static std::unique_ptr<TRANS> create() { return std::make_unique<TRANS>(); } + }; + +} // namespace TPCnv + + + // Base converter template for polymorphic types // Converters for objects in the same inheritance tree must share the same diff --git a/Database/TPTools/TPTools/TPConverter.icc b/Database/TPTools/TPTools/TPConverter.icc index 4864c828e9ce5420a214280fb04cbfc9d7cf2e59..01634dfea722b4c7f516d855fd82f5b64285c7a9 100644 --- a/Database/TPTools/TPTools/TPConverter.icc +++ b/Database/TPTools/TPTools/TPConverter.icc @@ -62,10 +62,13 @@ toPersistent_impl( const TRANS *trans, MsgStream &log ) template< class TRANS_BASE, class TRANS, class PERS > TRANS* TPPolyCnvBase<TRANS_BASE, TRANS, PERS>:: -createTransient(const PERS* persObj, MsgStream &log) { - std::unique_ptr<TRANS> trans(new TRANS()); +createTransient(const PERS* persObj, MsgStream &log) +{ + // this is by default equivalent to 'new TRANS()' + std::unique_ptr<TRANS> trans = TPCnv::CreateTransient<TRANS>::create(); + this->persToTrans(persObj, trans.get(), log); - return(trans.release()); + return( trans.release() ); }