Support serialization as another type without casting

This adds a READWRITEAS(type, obj) macro which serializes obj as if it
were casted to (const type&) when const, and to (type&) when non-const.

This makes it usable in serialization code that uses a single
implementation for both serialization and deserializing, which doesn't
know the constness of the object involved.
This commit is contained in:
Pieter Wuille
2017-07-07 16:06:56 -07:00
parent 8ee5c7b747
commit 818dc74ba2
7 changed files with 13 additions and 8 deletions

View File

@@ -395,7 +395,7 @@ public:
mapValueCopy["timesmart"] = strprintf("%u", nTimeSmart);
}
s << *static_cast<const CMerkleTx*>(this);
s << static_cast<const CMerkleTx&>(*this);
std::vector<CMerkleTx> vUnused; //!< Used to be vtxPrev
s << vUnused << mapValueCopy << vOrderForm << fTimeReceivedIsTxTime << nTimeReceived << fFromMe << fSpent;
}
@@ -406,7 +406,7 @@ public:
Init(nullptr);
char fSpent;
s >> *static_cast<CMerkleTx*>(this);
s >> static_cast<CMerkleTx&>(*this);
std::vector<CMerkleTx> vUnused; //!< Used to be vtxPrev
s >> vUnused >> mapValue >> vOrderForm >> fTimeReceivedIsTxTime >> nTimeReceived >> fFromMe >> fSpent;