1

基本的に、これはセマンティクスに関する質問です。私は C++ でのシリアル化 (デ) に Cereal ライブラリを使用していますが、そのコーディング スタイルが興味深いものであることがわかりました。

cereal::PortableBinaryInputArchive ar(instream);
int out;
ar(out);
// int is successfully deserialized from input stream here.

トリッキーな部分は、参照によって「out」を渡さず、ar() がその値を変更できることです。実際、作成者は演算子「()」をオーバーライドしているだけです。そして、ソースファイルに対応する行が見つかりました。

OutputArchive & operator=( OutputArchive const & ) = delete;

  //! Serializes all passed in data
  /*! This is the primary interface for serializing data with an archive */
  template <class ... Types> inline
  ArchiveType & operator()( Types && ... args )
  {
    self->process( std::forward<Types>( args )... );
    return *self;
  }

特に最初の行(「= delete」)と「std::forward(args)...」に関することです。va_arg のようなマクロが使用されているケースをいくつか見ただけで、このようなものに遭遇したのは初めてです。また、「&&」は何の略ですか?誰かがそれに光を当てることができますか?

4

1 に答える 1