元程式設計:函數定義的替代範本選擇標準
本問題探討了基於型別轉換能力定義範本的概念到一個字串。原始碼使用 is_arithmetic 類型特徵,但建議改為使用一個標準來評估是否為該類型定義了 to_string。
但是,與此標準相反,確定何時未定義 to_string,證明具有挑戰性的。以下程式碼失敗:
template<typename T> enable_if_t<decltype(to_string(T{})::value, string> (T t){ // ... }
為了解決這個問題,答案建議使用Walter Brown 的void_t 類型特徵,它允許創建以下內容:
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 { };
此類型特徵有效地評估是否為給定類型定義了to_string,從而提供了更準確地符合原始意圖的替代模板選擇標準。
以上是元編程可以幫助定義基於字串轉換的模板嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!