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

Patricia Arquette
リリース: 2024-10-26 01:58:28
オリジナル
925 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!