トップページ > プログラム > 2019年09月10日 > wmYy4ZD0

書き込み順位&時間帯一覧

14 位/120 ID中時間01234567891011121314151617181920212223Total
書き込み数0100000000001000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part144

書き込みレス一覧

C++相談室 part144
937 :デフォルトの名無しさん[sage]:2019/09/10(火) 01:40:29.13 ID:wmYy4ZD0
>>934
ちなみに、C++ における tuple とは、異なる型のオブジェクトの集合体のような
もので、get<idx>(tpl) とすると idx 番目の要素が参照できます。
動的配列 vector、リンクリスト list は同じ型の集合体ですが、tupleは
char, int, string 任意の順番で任意個数入れたりするようなことが可能です。
tuple は class を次々に継承することで実現され、N個の要素の場合は、
(N - 1) 回継承されて実現されています。
get<idx>(tpl) は、コンパイル段階で静的に型が決まるようになっており、
idx を 1 ずつ減らしながら idxが0 になるまでtemplateを再帰的に具現化(展開)し
て行っています。その際、基本クラスへの「cast」を利用して上手く実装されています。
get<TYPE>(tpl) は、その TYPE 版で、tuple の中の TYPE 型の要素を取り出すもので、
TYPEの要素が一個だけであることを仮定しています。

>>934 の
using _Ttype = typename _Tuple_element<_Ty, tuple<_Types...>>::_Ttype;
  return ((_Ttype&) _Tuple)._Myfirst._Val;
の部分は、丁度 TYPE = _Ty の場合のもので _Tuple_element<_Ty, tuple<_Types...>>
の部分が、再帰的に template 具現化を使って _Ty の型の要素が先頭になるまで
tuple の要素を減らす処理を行っており、_Ttype には、その tuple の型が入ります。
次の return 文は、cast を行っている部分です。
>>933 の(2)は、再帰的に tuple の先頭の要素を除去して行くマクロで、(1)は、
tuple の先頭が _Type になった場合にマクロ展開の動作を停止するためのものです。
C++相談室 part144
939 :デフォルトの名無しさん[sage]:2019/09/10(火) 12:01:32.29 ID:wmYy4ZD0
>>938
>>933 は単純な BNFとはかなり違うはず。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。