私は3rdpartyオープンソースの数学ライブラリからクラスmat4を持っています。それは自分のシリアル化の方法を持っていないので、私は行列MAT4のシリアライズが含まれている私のメインのプロジェクトで別のヘッダー作成しました:メンバー関数とフリー関数を使ったboost :: serialization
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, mat4 & matrix, const unsigned int version)
{
// some serialization of matrix goes here...
}
} // namespace serialization
} // namespace boost
を私はクラスMAT4に直接シリアライズを追加したとき、それは後になるまで完全に働いたと
struct mat4
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(data);
}
// some other members and functions goes here
};
このような変更の後、free関数のserializeが呼び出されました。 mat4メンバー関数の代わりにフリー関数が呼び出された理由を教えてください。おそらく、私が逃した標準のいくつかの単純なルールがあります。
私がコメントアウトすると、free関数メンバ関数が呼び出されます。
ありがとうございます!非常に美しいテクニック。 – innochenti