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