2017-10-17 4 views
1

* .protoファイルをコンパイルするときに、生成されたクラスにはコンストラクタもコピー/移動コンストラクタもありません。私はProtobufメッセージコンストラクタ

message Float3Vector{ 
    optional float x = 1; 
    optional float y = 2; 
    optional float z = 3; 
} 

を持っている場合 は、例えば、私はFloat3Vector(my_x, my_y, my_z)を呼び出すことはできません。これはdocumentationからも明らかです。

これまでのところとても良いです。他の方法もあります。 私の質問は、これを行う特別な理由はありますか?つまり、これを不可能にする技術的な理由があります(つまり、シリアライズやコードの生成などがあります)。

答えて

1

目的に応じてコピーが無効になっています。大きなprotobufsのコピーは高価であり、誤ったコピーを防ぐためにCopyFrom()を明示的にするように選択されています。

C++ 11が到着したときに移動は必要なく、無視されました。次のprotobufリリースにはおそらく移動が含まれています。