回答編集履歴

4

完全コードで型の違いがわかりにくいので、値をそれぞれ区別できるように修正

2020/05/19 10:08

投稿

mitama_rs
mitama_rs

スコア165

test CHANGED
@@ -98,8 +98,6 @@
98
98
 
99
99
  #include <type_traits>
100
100
 
101
- #include <boost/type_index.hpp>
102
-
103
101
 
104
102
 
105
103
  template <class Tuple, class Elem, std::size_t ...Indices>
@@ -132,31 +130,49 @@
132
130
 
133
131
  #include <iostream>
134
132
 
133
+ #include <string>
134
+
135
+
136
+
135
137
  int main() {
136
138
 
137
- std::vector<std::tuple<int, double, std::string>> source{ {1, 1.0, "1"}, {2, 2.0, "2"} };
139
+ std::vector<std::tuple<int, double, std::string>> source{
138
140
 
139
- std::tuple result = vt_to_tv(source);
141
+ {1, 1.1, "one"},
140
142
 
141
- // std::cout << boost::typeindex::type_id<decltype(result)>().pretty_name() << "\n";
143
+ {2, 2.2, "two"}
142
144
 
145
+ };
146
+
147
+
148
+
149
+ auto [int_vec, double_vec, string_vec] = vt_to_tv(source);
150
+
151
+
152
+
153
+ for (auto&& elem : int_vec)
154
+
143
- for (auto&& elem : std::get<0>(result)) std::cout << elem << " ";
155
+ { std::cout << elem << " "; }
144
156
 
145
157
  std::cout << "\n";
146
158
 
159
+ for (auto&& elem : double_vec)
160
+
147
- for (auto&& elem : std::get<1>(result)) std::cout << elem << " ";
161
+ { std::cout << elem << " "; }
148
162
 
149
163
  std::cout << "\n";
150
164
 
165
+ for (auto&& elem : string_vec)
166
+
151
- for (auto&& elem : std::get<2>(result)) std::cout << elem << " ";
167
+ { std::cout << elem << " "; }
152
168
 
153
169
  std::cout << "\n";
154
170
 
155
171
  // 1 2
156
172
 
157
- // 1 2
173
+ // 1.1 2.2
158
174
 
159
- // 1 2
175
+ // one two
160
176
 
161
177
  }
162
178
 
@@ -164,4 +180,4 @@
164
180
 
165
181
 
166
182
 
167
- [Wandboxで実行する](https://wandbox.org/permlink/27DQJduaAGRKayW8)
183
+ [Wandboxで実行する](https://wandbox.org/permlink/XeJyQJWM5HTPaVAW)

3

コピペのopが残っていたので `,` に

2020/05/19 10:08

投稿

mitama_rs
mitama_rs

スコア165

test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  ```
70
70
 
71
- ((push_0 , push_1) , ...) op push_N-1
71
+ ((push_0 , push_1) , ...) , push_N-1
72
72
 
73
73
  ```
74
74
 

2

fold expressionの説明で結合方向を解説していないので修正

2020/05/19 08:51

投稿

mitama_rs
mitama_rs

スコア165

test CHANGED
@@ -62,23 +62,25 @@
62
62
 
63
63
 
64
64
 
65
- すると、次のようにカンマ区切りの式を得ることができます。
65
+ すると、次のように(この場合は左結合の)カンマ区切りの式を得ることができます。
66
66
 
67
67
 
68
68
 
69
- ```cpp
69
+ ```
70
70
 
71
- get<0>(tup).push_back(get<0>(elem)),
71
+ ((push_0 , push_1) , ...) op push_N-1
72
-
73
- get<1>(tup).push_back(get<1>(elem)).
74
-
75
- get<2>(tup).push_back(get<2>(elem)),
76
-
77
- ...,
78
-
79
- get<N-1>(tup).push_back(get<N-1>(elem))
80
72
 
81
73
  ```
74
+
75
+
76
+
77
+ ここで `push_N` は
78
+
79
+ `std::get<N>(tup).emplace_back(std::get<N>(elem))`
80
+
81
+ のことです
82
+
83
+
82
84
 
83
85
 
84
86
 

1

`get<N-1>(res).push_back(get<2>(v[i]));` => `get<N-1>(res).push_back(get<N-1>(v[i]));`

2020/05/19 08:46

投稿

mitama_rs
mitama_rs

スコア165

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  ...
22
22
 
23
- get<N-1>(res).push_back(get<2>(v[i]));
23
+ get<N-1>(res).push_back(get<N-1>(v[i]));
24
24
 
25
25
  ```
26
26
 
@@ -76,7 +76,7 @@
76
76
 
77
77
  ...,
78
78
 
79
- get<N-1>(tup).push_back(get<2>(elem))
79
+ get<N-1>(tup).push_back(get<N-1>(elem))
80
80
 
81
81
  ```
82
82