2011-12-07 5 views
2

私はC++での私の仲間のプログラマは型の安全性を気にし、通常の整数としてflagsフィールドを処理していない、次の.protoファイル(別のプロジェクトによって与えられた)protobuf-netでカスタムオプションをサポートするには?

enum RGBFlags { FLAG_RED = 1; FLAG_GREEN = 2; FLAG_BLUE = 4; } 

message SomeMessage { 
    // Values from RGBFlags only allowed 
    optional int32 flags = 2; 
} 

を解析するprotobuf-netProtoGen.exeを使用しています。私は私が必要な `[フラグ]」注釈を生成するProtoGetXSLT transformをプロトコードを修正するprotbuf custom optionsを使用して修正することができると考え

SomeMessage foo = new SomeMessage(); 
foo.flags = (int)RGBFlags.FLAG_BLUE | (int)RGBFlags.FLAG_GREEN; 

:私はもっと厳しいことや、そのようなコードを避けるために試してみたかったです。

extend google.protobuf.EnumOptions { 
    optional bool generate_bit_field = 60000; 
} 

enum RGBFlags { 
    option (generate_bit_field) = true; 
    FLAG_RED = 1; FLAG_GREEN = 2; FLAG_BLUE = 4; 
} 

message SomeMessage { 
    // Values from RGBFlags only allowed 
    optional int32 flags = 2; 
} 

問題は、すべてのカスタムオプションがProtoGenに一時ファイルにuninterpreted_optionとして表示されていることです。

私のコードで[Flags]注釈を取得するにはどうすればよいですか?

答えて

1

Reフラグ;生のprotobufの仕様は実際に複合列挙型の値をサポートしていないので、何らかの理由で私は彼らがそれをやっている理由を理解しています。そして残念ながらpartial enumというようなものはありませんので、[Flags]を別のコードファイルに追加することはできません。

Reカスタムオプション。それは優れた疑問であり、以前にカスタムオプションのサポートが強化されています。私が追加したいことは間違いありませんが、は他の機能と比較してです。リソースが限られているため、まだ完全には調査されていません。

したがって、私はあなたに素晴らしい答えはありません。その機能は実際にはあまり現時点ではありません。 xsltで特定のシナリオをハードコードすることができます。または、私が周りを回るまで待ってください(私は特定のタイムスケールを持っていません)。または、自分自身を覗いてみてください。

関連する問題