亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

漂亮打印std :: tuple

漂亮打印std :: tuple

C++
蕭十郎 2019-12-10 13:08:02
這是我先前關于漂亮打印的STL容器的問題的跟進,我們設法為其開發了一個非常優雅且完全通用的解決方案。在下一步中,我想std::tuple<Args...>使用可變參數模板(嚴格來說是C ++ 11)包括的漂亮打印。對于std::pair<S,T>,我只是說std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p){  return o << "(" << p.first << ", " << p.second << ")";}打印元組的類似結構是什么?我嘗試了各種形式的模板參數堆棧解壓縮,傳遞索引并使用SFINAE來發現何時到達最后一個元素,但是沒有成功。我不會因我的密碼破譯而負擔你;希望問題描述很簡單。本質上,我想要以下行為:auto a = std::make_tuple(5, "Hello", -0.1);std::cout << a << std::endl; // prints: (5, "Hello", -0.1)獎勵積分包括與上一個問題相同的通用水平(char / wchar_t,對定界符)!
查看完整描述

3 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

我在C ++ 11(gcc 4.7)中工作正常。我敢肯定,我沒有考慮過一些陷阱,但是我認為代碼易于閱讀并且并不復雜。唯一奇怪的是可以確保我們在到達最后一個元素時終止的“后衛”結構tuple_printer。另一個奇怪的事情可能是sizeof ...(Types),它返回Types類型包中的類型數。它用于確定最后一個元素的索引(大小...(類型)-1)。


template<typename Type, unsigned N, unsigned Last>

struct tuple_printer {


    static void print(std::ostream& out, const Type& value) {

        out << std::get<N>(value) << ", ";

        tuple_printer<Type, N + 1, Last>::print(out, value);

    }

};


template<typename Type, unsigned N>

struct tuple_printer<Type, N, N> {


    static void print(std::ostream& out, const Type& value) {

        out << std::get<N>(value);

    }


};


template<typename... Types>

std::ostream& operator<<(std::ostream& out, const std::tuple<Types...>& value) {

    out << "(";

    tuple_printer<std::tuple<Types...>, 0, sizeof...(Types) - 1>::print(out, value);

    out << ")";

    return out;

}



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 341 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號