フィールド

前のセクションで述べたメソッドに加えて、プロトコルバッファコンパイラは .proto ファイルのメッセージに定義された個々のフィールドへのアクセサメソッド群を生成します。

一個要素の数値フィールド

次のようなフィールド定義:
optional int32 foo = 1;
required int32 foo = 1;
に対して、コンパイラは次のようなアクセサメソッドを生成します:
bool has_foo() const
フィールドがセットされていたら true を返す。
int32 foo() const
フィールドの現在の値を返す。フィールドがセットされていなければ、デフォルト値を返す。
void set_foo(int32 value)
フィールドの値をセットする。これを呼んだ後は has_foo()true を返し、foo()value を返す。
void clear_foo()
フィールドの値をクリアする。これを呼んだ後は has_foo()false を返し、foo() はデフォルト値を返す。

他の数値型(boolも含む)では、int32スカラー型表の対応する C++ 型で置き換えられます。

一個要素の文字列フィールド

次のようなフィールド定義:
optional string foo = 1;
required string foo = 1;
optional bytes foo = 1;
required bytes foo = 1;
に対しては、コンパイラは次のようなアクセサメソッドを生成します:
bool has_foo() const
フィールドがセットされていたら true を返す。
const string& foo() const
フィールドの現在の値を返す。フィールドがセットされていなければ、デフォルト値を返す。
void set_foo(const string& value)
フィールドの値をセットする。これを呼んだ後は has_foo()true を返し、foo()value のコピーを返す。
void set_foo(const char* value)
フィールドの値を Cスタイルの NULL終端文字列を使ってセットする。これを呼んだ後は has_foo()true を返し、foo()value のコピーを返す。
string* mutable_foo()
フィールドの値を格納している stringオブジェクトの、変更可能なポインタを返す。この呼び出しの前にフィールドをセットしていない場合は、結果の string は空になる(デフォルト値では *ない*)。
これを呼んだ後は has_foo()true を返し、foo() は与えられた string に書かれた値を返す。
void clear_foo()
フィールドの値をクリアする。これを呼んだ後は has_foo()false を返し、foo() はデフォルト値を返す。

一個要素の enum フィールド

次の列挙型が与えられて:
enum Bar {
  BAR_VALUE = 1;
}
次のようなフィールド定義:
optional Bar foo = 1;
required Bar foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
bool has_foo() const
フィールドがセットされていたら true を返す。
Bar foo() const
フィールドの現在の値を返す。フィールドがセットされていなければ、デフォルト値を返す。
void set_foo(Bar value)
フィールドの値をセットする。これを呼んだ後は has_foo()true を返し、foo()value を返す。デバッグモード(NDEBUGが定義されていない)で valueBar に定義されたどの値とも一致しない場合は、このメソッドはプロセスを終了させる。
void clear_foo()
フィールドの値をクリアする。これを呼んだ後は has_foo()false を返し、foo() はデフォルト値を返す。

一個要素の組み込みメッセージフィールド

次のメッセージ型が与えられて:
message Bar{}
次のようなフィールド定義:
optional Bar foo = 1;
required Bar foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
bool has_foo() const
フィールドがセットされていたら true を返す。
const Bar& foo() const
フィールドの現在の値を返す。フィールドがセットされていなければ、フィールドがセットされていない Bar(おそらく Bar::default_instance()) を返す。
Bar* mutable_foo()
フィールドの値を格納している Barオブジェクトの、変更可能なポインタを返す。この呼び出しの前にフィールドをセットしていない場合は、結果の Bar はどのフィールドもセットされていない(新たに割り当てられた Bar に等しい)。これを呼んだ後は has_foo()true を返し、foo() は同じ Bar インスタンスの参照を返す。
void clear_foo()
フィールドの値をクリアする。これを呼んだ後は has_foo()false を返し、foo() はデフォルト値を返す。

repeated な数値フィールド

次のようなフィールド定義:
repeated int32 foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
int foo_size() const
フィールドに現在ある要素数を返す。
int32 foo(int index) const
与えられたゼロベースのインデックス番号の要素を返す。
void set_foo(int index, int32 value)
与えられたゼロベースのインデックス番号の要素をセットする。
void add_foo(int32 value)
与えられた値をフィールドの新たな要素として追加する。
void clear_foo()
フィールドから全ての要素を取り除く。これを呼んだ後は、foo_size() はゼロを返す。
const RepeatedField <int32>& foo() const
フィールドの要素を格納してある、内部の RepeatedField を返す。このコンテナは STLライクなイテレータとメソッドを提供している。
const RepeatedField <int32>* mutable_foo() const
フィールドの要素を格納してある、内部の RepeatedField の変更可能なポインタを返す。このコンテナは STLライクなイテレータとメソッドを提供している。

他の数値型(boolも含む)では、int32スカラー型表の対応する C++ 型で置き換えらます。

repeated な文字列フィールド

次のようなフィールド定義:
repeated string foo = 1;
repeated bytes  foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
int foo_size() const
フィールドに現在ある要素数を返す。
const string& foo(int index) const
与えられたゼロベースのインデックス番号の要素を返す。
void set_foo(int index, const string& value)
与えられたゼロベースのインデックス番号の要素をセットする。
void set_foo(int index, const char* value)
CスタイルのNULL終端文字列を用いて、与えられたゼロベースのインデックス番号の要素をセットする。
string* mutable_foo(int index)
与えられたゼロベースのインデックス番号の値を格納している string オブジェクトの変更可能なポインタを返す。このポインタは、Clear()clear_foo() を呼んだり、内部の RepeatedPtrField を使ってこの要素を取り除いたら無効となる。
void add_foo(const string& value)
与えられた値をフィールドの新たな要素として追加する。
void add_foo(const char* value)
CスタイルのNULL終端文字列を用いて、与えられた値をフィールドの新たな要素として追加する。
string* add_foo()
新たな空文字列を追加し、そのポインタを返す。このポインタは、Clear()clear_foo() を呼んだり、内部の RepeatedPtrField を使ってこの要素を取り除いたら無効となる。
void clear_foo()
フィールドから全ての要素を取り除く。これを呼んだ後は、foo_size() はゼロを返す。
const RepeatedPtrField<string>& foo() const
フィールドの要素を格納している、内部の RepeatedPtrField を返す。このコンテナは STLライクなイテレータとメソッドを提供している。
RepeatedPtrField<string>* mutable_foo()
フィールドの要素を格納している、内部の RepeatedPtrField の変更可能なポインタを返す。このコンテナは STLライクなイテレータとメソッドを提供している。

repeated な enum フィールド

次の列挙型が与えられて:
enum Bar {
  BAR_VALUE = 1;
}
次のようなフィールド定義:
repeated Bar foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
int foo_size() const
フィールドに現在ある要素数を返す。
Bar foo(int index) const
与えられたゼロベースのインデックス番号の要素を返す。
void set_foo(int index, Bar value)
与えられたゼロベースのインデックス番号の要素をセットする。デバッグモード(NDEBUGが定義されていない)で valueBar に定義されたどの値とも一致しない場合は、このメソッドはプロセスを終了させる。
void add_foo(Bar value)
与えられた値をフィールドの新たな要素として追加する。デバッグモード(NDEBUGが定義されていない)で valueBar に定義されたどの値とも一致しない場合は、このメソッドはプロセスを終了させる。
void clear_foo()
フィールドから全ての要素を取り除く。これを呼んだ後は、foo_size() はゼロを返す。
const RepeatedField <Bar>& foo() const
フィールドの要素を格納してある、内部の RepeatedField を返す。このコンテナは STLライクなイテレータとメソッドを提供している。
const RepeatedField <Bar>* mutable_foo() const
フィールドの要素を格納してある、内部の RepeatedField の変更可能なポインタを返す。このコンテナは STLライクなイテレータとメソッドを提供している。

repeated な組み込みメッセージフィールド

次のメッセージ型が与えられて:
message Bar{}
次のようなフィールド定義:
repeated Bar foo = 1;
には、コンパイラは次のようなアクセサメソッドを生成します:
int foo_size() const
フィールドに現在ある要素数を返す。
const Bar& foo(int index) const
与えられたゼロベースのインデックス番号の要素を返す。
Bar* mutable_foo(int index)
与えられたゼロベースのインデックス番号の値を格納している Bar オブジェクトの変更可能なポインタを返す。このポインタは、Clear()clear_foo() を呼んだり、内部の RepeatedPtrField を使ってこの要素を取り除いたら無効となる。
Bar* add_foo()
新たな要素を追加し、そのポインタを返す。結果の Barはどのフィールドもセットされていない。このポインタは、Clear()clear_foo() を呼んだり、内部の RepeatedPtrField を使ってこの要素を取り除いたら無効となる。
void clear_foo()
フィールドから全ての要素を取り除く。これを呼んだ後は、foo_size() はゼロを返す。
const RepeatedPtrField<Bar>& foo() const
フィールドの要素を格納している、内部の RepeatedPtrField を返す。このコンテナは STLライクなイテレータとメソッドを提供している。
RepeatedPtrField<Bar>* mutable_foo()
フィールドの要素を格納している、内部の RepeatedPtrField の変更可能なポインタを返す。このコンテナは STLライクなイテレータとメソッドを提供している。