
68
|
3 章 現代の C++ への移行
failed = 1,
incomplete = 100,
corrupt = 200,
audited = 500,
indeterminate = 0xFFFFFFFF
};
スコープを持つ enum が名前空間を汚染せず、無意味な暗黙の型変換の影響も受けない点を踏まえ
た上で、スコープを持たない enum が有用になる場面が少なくとも 1 つはあると聞くと意外に思え
るかもしれません。それは C++11 の std::tuple 内のフィールドを表す場合です。例えばソーシャ
ルネットワーキングウェブサイト上のユーザを表す、名前、電子メールアドレス、評判のタプルが
あるとします。
型エイリアス。項目 9 を参照
using UserInfo = // type alias; see Item 9
std::tuple<std::string, // name
std::string, // email
std::size_t>; // reputation
名前、メールアドレス、評判
コメントにはタプルのフィールドが表現する内容を記述してありますが、別ソースファイルに次
のようなコードがある場合にはほとんど役に立ちません。
UserInfo uInfo; // object of tuple type
… タプル型のオブジェクト
auto val = std::get<1>(uInfo); // get value of field 1
フィールド 1 の値を得る
上例のコード