如何迭代std:tuple的元素?我如何迭代一個(gè)元組(使用C+11)?我嘗試了以下幾點(diǎn):for(int i=0; i<std::tuple_size<T...>::value; ++i)
std::get<i>(my_tuple).do_sth();但這是行不通的:錯(cuò)誤1:對(duì)不起,未實(shí)現(xiàn):無(wú)法展開(kāi)“偵聽(tīng)器.”到一個(gè)固定長(zhǎng)度的參數(shù)列表中。錯(cuò)誤2:我不能出現(xiàn)在常量表達(dá)式中。那么,如何正確地迭代元組的元素呢?
3 回答

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
#include <tuple>#include <utility> #include <iostream>template<std::size_t I = 0, typename... Tp>inline typename std: :enable_if<I == sizeof...(Tp), void>::type print(std::tuple<Tp...>& t) { }template<std::size_t I = 0, typename... Tp>inline typename std::enable_if<I < sizeof...(Tp), void>::type print(std::tuple<Tp...>& t) { std::cout << std::get<I>(t) << std::endl; print<I + 1, Tp...>(t); }intmain(){ typedef std::tuple<int, float, double> T; T t = std::make_tuple(2, 3.14159F, 2345.678); print(t);}
for_each
#include <tuple>#include <utility> template<std::size_t I = 0, typename FuncT, typename... Tp>inline typename std: :enable_if<I == sizeof...(Tp), void>::type for_each(std::tuple<Tp...> &, FuncT) // Unused arguments are given no names. { }template<std::size_t I = 0, typename FuncT, typename... Tp>inline typename std::enable_if<I < sizeof...(Tp), void>::type for_each(std::tuple<Tp...>& t, FuncT f) { f(std::get<I>(t)); for_each<I + 1, FuncT, Tp...>(t, f); }
FuncT
- 3 回答
- 0 關(guān)注
- 849 瀏覽
添加回答
舉報(bào)
0/150
提交
取消