読者です 読者をやめる 読者になる 読者になる

pairのpiecewise construction

C++

pairに以下のようなコンストラクタが追加されて、どうやって使うんだこれと思っていたのですが

namespace std {
  template <class T1, class T2>
  struct pair {
    ...

    template <class... Args1, class... Args2>
    pair(piecewise_construct_t,
      tuple<Args1...> first_args, tuple<Args2...> second_args);
  };
}

vector::emplace_backがコンストラクタ引数を受け取るように、
pairのpiecewiseコンストラクタはfirstとsecondのコンストラクタ引数をtupleでまとめて受け取るようです。

struct Point {
  Point(int x, int y) {}
};

std::pair<Point, Point> p(std::piecewise_construct,
                          std::pack_arguments(1, 2),
                          std::pack_arguments(3, 4));

コンストラクタ内では、get<0>(first_args), get<1>(first_args)...を転送してfirstを構築します。


追記:
Uniform Initializationがあるからこれでいっか。

struct Point {
  Point(int x, int y) {}
};

std::pair<Point, Point> p(std::piecewise_construct, {1, 2}, {3, 4});


http://twitter.com/Cryolite/statuses/12979028446

http://twitter.com/Cryolite/statuses/12979061124

N3059 Proposal to Simplify pair (rev 5.2)

N3059 - Togetterまとめ