最近boost::tuple
、の代わりに使用していることに気づきましたstd::pair
。各メンバーの列挙子を定義できるため、各メンバーが何であるかは明らかです。
typedef boost::tuple<int, int> KeyValueTuple;
enum {
KEY
, VALUE
};
void foo (KeyValueTuple & p) {
p.get<KEY> () = 0;
p.get<VALUE> () = 0;
}
void bar (int key, int value)
{
foo (boost:tie (key, value));
}
ところで、このアプローチを使用することに隠れたコストがあるかどうかについてのコメントを歓迎します。
編集:グローバルスコープから名前を削除します。
グローバル名前空間に関する簡単なコメント。一般的に私は使用します:
struct KeyValueTraits
{
typedef boost::tuple<int, int> Type;
enum {
KEY
, VALUE
};
};
void foo (KeyValueTuple::Type & p) {
p.get<KeyValueTuple::KEY> () = 0;
p.get<KeyValueTuple::VALUE> () = 0;
}
boost::fusion
アイデンティティと価値をより緊密に結び付けるのは事実のように見えます。