型特性は、コンパイル時に型のプロパティを評価する C の強力なツールです。 。この質問では、さまざまな一般的な STL コンテナー型を識別する型特性 (is_vector または is_container) を構築することを目的としています。
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 中国語 Web サイトの他の関連記事を参照してください。