protobuf CopyFrom()の代わりに代入

841 ワード

protobuf CopyFrom()の代わりに代入
例:Replace protobuf CopyFrom with assignment
protobufが生成したC++コードでは、CopyFrom()は任意のMessageをパラメータとして受け入れることができるため、2つの異なるタイプのメッセージ間でコピーすることができる.
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const PlayerData& from);

割り当て操作は、タイプが正しいことを保証します.
class PlayerData : public ::google::protobuf::Message {
 public:
  ...
  inline PlayerData& operator=(const PlayerData& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  inline PlayerData& operator=(PlayerData&& from) noexcept {
    ...
  }
  #endif

タイプが一致しない場合、コンパイルはエラーを報告します.
error: no match for ‘operator=’ (operand types are ‘a::PlayerData’ and ‘a::HeroInfo’)

長年使っていたCopyFrom()が間違っていることに気づきました.