protobuf CopyFrom()の代わりに代入
841 ワード
protobuf CopyFrom()の代わりに代入
例:Replace protobuf CopyFrom with assignment
protobufが生成したC++コードでは、CopyFrom()は任意のMessageをパラメータとして受け入れることができるため、2つの異なるタイプのメッセージ間でコピーすることができる.
割り当て操作は、タイプが正しいことを保証します.
タイプが一致しない場合、コンパイルはエラーを報告します.
長年使っていた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()が間違っていることに気づきました.