なぜ非const参照ですか?なぜmake_nvpに非const参照が必要ですか?
template<class T>
const nvp<T> make_nvp(const char * name, T & t);
私はパブリックフィールドを持つ構造体を持っているため、プライベートフィールドにしてアクセサーを使用する必要があります。だから私は一時的な変数を使用して、make_nvp
にそれらを渡すことが許可されているかどうかを知りたい、または私はデータ構造と私のシリアライザをbefriendする必要があります。
// option 1
auto a = data.getA();
ar & make_nvp("A", a);
// option 2
ar & make_nvp("A", data._a); // _a is private, but serializer is friend
私はそれがこの非const性を利用して、後で使用するためにそれを保存し、option 1
に問題がある可能性がいくつかのケースではので、それは、テンプレートパラメータだから、このar
が何であるかを知りません。
ブーストアーカイブでは、シリアライズとデシリアライズの両方に単一の機能を使用できます。これは、アーカイブをテンプレート引数として使用することによって実現されます。これは、構造体を直列化する出力アーカイブまたは構造体をロードする入力アーカイブにすることができます。非直列化のために、関数は非直列化参照を必要とします。なぜなら 'make_nvp'は非const参照を必要とするのです。 – pschill
@pschillあなたのコメントが好きです。あなたは答えに回りたいと思うかもしれません。私はそれを受け入れます。 – Yola