Quantcast
Channel: C++博客-金庆的专栏
Viewing all articles
Browse latest Browse all 291

用赋值代替 protobuf CopyFrom()

$
0
0
# 用赋值代替 protobuf CopyFrom()

示例:[Replace protobuf CopyFrom with assignment](https://github.com/tensorflow/tensorflow/commit/9501c4104125fb8c2c2d2e837fc2dd8a24034d52)

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

金庆 2019-04-04 17:57 发表评论

Viewing all articles
Browse latest Browse all 291

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>