ホームページ  >  記事  >  バックエンド開発  >  C の型特性を使用して STL コンテナを検出するにはどうすればよいですか?

C の型特性を使用して STL コンテナを検出するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 01:58:28925ブラウズ

How to Detect STL Containers Using Type Traits in C  ?

型特性を使用した STL コンテナの検出

はじめに

型特性は、コンパイル時に型のプロパティを評価する C の強力なツールです。 。この質問では、さまざまな一般的な STL コンテナー型を識別する型特性 (is_vector または is_container) を構築することを目的としています。

is_vector の解決策

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_container に一般化

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。