用赋值代替 protobuf CopyFrom()

C/C++ 专栏收录该内容
212 篇文章 0 订阅

用赋值代替 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() 都是错误的使用。

  • 2
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值