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

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

元編程:函數定義失敗定義了單獨的函數

元編程:函數定義失敗定義了單獨的函數

C++
函數式編程 2019-11-03 04:04:33
在此答案中,我根據類型的is_arithmetic屬性定義一個模板:template<typename T> enable_if_t<is_arithmetic<T>::value, string> stringify(T t){    return to_string(t);}template<typename T> enable_if_t<!is_arithmetic<T>::value, string> stringify(T t){    return static_cast<ostringstream&>(ostringstream() << t).str();}dyp建議,is_arithmetic是否to_string為類型定義而不是類型的屬性作為模板選擇標準。這顯然是可取的,但我不知道一種說法:如果std::to_string未定義,則使用ostringstream重載。聲明to_string條件很簡單:template<typename T> decltype(to_string(T{})) stringify(T t){    return to_string(t);}與我無法弄清楚如何構造的標準相反。這顯然行不通,但希望它能傳達我正在嘗試構造的內容:template<typename T> enable_if_t<!decltype(to_string(T{})::value, string> (T t){    return static_cast<ostringstream&>(ostringstream() << t).str();}
查看完整描述

3 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

使用Walter Brown的void_t:


template <typename...>

using void_t = void;

制作這樣的類型特征非常容易:


template<typename T, typename = void>

struct has_to_string

: std::false_type { };


template<typename T>

struct has_to_string<T, 

    void_t<decltype(std::to_string(std::declval<T>()))>

    > 

: std::true_type { };



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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