類型特徵是 C 中的強大工具,可以在編譯時評估類型的屬性。在這個問題中,我們的目標是建構一個類型特徵(is_vector 或 is_container)來識別各種常見的 STL 容器類型。
提供的 is_vector 實作遇到錯誤,因為它確實如此不使用模板參數 U。為了修正這個問題,這裡有一個修訂版本:
<code class="cpp">template<class T> struct is_vector { static bool const value = false; }; template<class U> struct is_vector<std::vector<U>> { static bool const value = true; };</code>
擴充is_vector 概念,我們可以建立一個通用的is_container 特徵來識別各種STL 容器類型:
<code class="cpp">template<typename T, typename _ = void> struct is_container : std::false_type {}; template<typename... Ts> struct is_container_helper {}; template<typename T> struct is_container< T, std::conditional_t< false, is_container_helper< typename T::value_type, typename T::size_type, typename T::iterator, decltype(std::declval<T>().size()), decltype(std::declval<T>().begin()), decltype(std::declval<T>().end()) >, void > > : public std::true_type {};</code>
可以自訂此改進的is_container 特徵,以檢查其他特定於容器的特徵,或透過驗證特定成員函數和類型的存在來僅限於STL 容器。
以上是如何在 C 中使用型別特徵來偵測 STL 容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!