From 9963741ffc7cff87f65b70e31aef3518a4004b0d Mon Sep 17 00:00:00 2001 From: Wenhao-H Date: Sat, 9 Jun 2018 20:52:27 +0800 Subject: [PATCH] serialize tuple --- .../normalization/combined_normalization.hpp | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/mlpack/methods/cf/normalization/combined_normalization.hpp b/src/mlpack/methods/cf/normalization/combined_normalization.hpp index 0d34ea25e1..8cf6062a82 100644 --- a/src/mlpack/methods/cf/normalization/combined_normalization.hpp +++ b/src/mlpack/methods/cf/normalization/combined_normalization.hpp @@ -93,10 +93,9 @@ class CombinedNormalization * Serialization. */ template - void serialize(Archive& ar, const unsigned int /* version */) + void serialize(Archive& ar, const unsigned int version) { - // Boost does not support tuple serialization??? - ar & BOOST_SERIALIZATION_NVP(normalizations); + SequenceSerialize<0, Archive>(ar, version); } private: @@ -185,6 +184,27 @@ class CombinedNormalization typename = void> void SequenceDenormalize(const arma::Mat& /* combinations */, arma::vec& /* predictions */) const { } + + //! Unpack normalizations tuple to serialize. + template< + int I, /* Which normalization in tuple to serialize */ + typename Archive, + typename = std::enable_if_t<(I < std::tuple_size::value)>> + void SequenceSerialize(Archive& ar, const unsigned int version) + { + std::string tagName = "normalization_"; + tagName += std::to_string(I); + ar & boost::serialization::make_nvp(tagName.c_str(), std::get(normalizations)); + SequenceSerialize(ar, version); + } + + //! End of tuple unpacking. + template< + int I, /* Which normalization in tuple to serialize */ + typename Archive, + typename = std::enable_if_t<(I >= std::tuple_size::value)>, + typename = void> + void SequenceSerialize(Archive& /* ar */, const unsigned int /* version */) { } }; } // namespace cf