template<std::size_t... Is>
void unlock_(std::index_sequence<Is...>) {
iter(std::get<Is>(tuple)...);
}
上記の例を考えてみましょう。私は理解できませんiter(std::get<Is>(tuple)...);
。私は...
が "演算子"を展開していることを知っています。したがって、パラメータパック(意味のある引数)またはテンプレートのパラメータメーターパックに適用する必要があります。 そして、私はstd::index_sequence<Is...>
が何であるか想像することができます。 Is
はテンプレートパラメータパックなので、1, 2, 3, 4, ...
(たとえば)にする必要があります。 この場合、outパラメータは型ではないため、固有です。それはsize_t
です。TMP C++およびパラメータパック
しかし、ここでは:std::get<Is>(tuple)...);
std::get<Is>(tuple)
はパラメータ/テンプレートパックを返しません。したがって、私は使用法のコンテキストがありません。
P.S.メタプログラミングの後のコードの見た目を見ることは可能でしょうか?アフター・アフター・プロセシングと同様に?
ありがとうございます。
pack変数を含む式全体が展開されるので、 'std :: get <1>(タプル)、std :: get (タプル)'、.... –
[パック拡張](http: /en.cppreference.com/w/cpp/language/parameter_pack)セクションの[パラメータパックのcppreferenceページ](http://en.cppreference.com/w/cpp/language/parameter_pack)では、この動作の仕組みについて説明しています。 – Andrew
パラメータパック展開は非常に複雑で、引数ではなく式全体が展開されます。 – SergeyA