web-dev-qa-db-ja.com

protobufで定数文字列を定義できますか?

Protobufの列挙型を使用して、C++アプリとJavaアプリの間で値を共有します。このようにして、同じ(int)値が言語間で共有され、値はコンパイル時に利用できます時間。どういうわけか、共通の.protoファイル?

13
ytoledano

あんまり。

使用できるハックがいくつかあります。どちらも最適ではなく、(私は思う)両方ともproto3で廃止されます。

  • 文字列フィールドでメッセージを定義し、定数値であるデフォルト値をそれに与えます。ただし、Protobuf 3はデフォルト値を削除しているようです。
  • "custom options" を使用します。これは、Javaまたは他の言語の注釈とよく似ているため、おそらく「注釈」と呼ばれるはずです。タイプの注釈を宣言できます。文字列の場合、ダミー宣言に注釈を付けて定数値を使用します。ただし、カスタムオプションはproto3でまたが削除された拡張に基づいているため、カスタムオプションも削除されていると思います(これがここで提供される回答です https://stackoverflow.com/a/11486640/2686899 )。

FWIW、 Cap'n Proto (プロトコルバッファーの代替)は定数をサポートしています。 (開示:私はCap'n ProtoおよびGoogleのほとんどのProtobuf v2の作者です。)

19
Kenton Varda