ホームページ > バックエンド開発 > C++ > C の派生クラス テンプレートの基本クラス Typedef にアクセスするにはどうすればよいですか?

C の派生クラス テンプレートの基本クラス Typedef にアクセスするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-19 12:52:09
オリジナル
930 人が閲覧しました

How Can I Access Base Class Typedefs in Derived Class Templates in C  ?

派生クラスのテンプレート Typedefs

C では、テンプレートを使用してジェネリック クラスとデータ構造を定義できます。ただし、基本クラスから派生クラスに typedef を伝播するには、特別な処理が必要です。

次のコードを考えてみましょう:

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};

template<typename T>
class B : public A<T> {
private:
    Vec_t v; // Error: Vec_t is not recognized
};
ログイン後にコピー

この例では、クラス A は型 T のベクトルの typedef を定義します。 、派生クラス B でこの typedef を使用しようとすると、Vec_t が B 内で認識されないためエラーが発生します。 scope.

この問題の原因は、C 標準におけるテンプレートの基本クラスのスコープの扱いにあります。標準のセクション 14.6.2/3 によると:

「クラス テンプレートまたはクラス テンプレートのメンバーの定義において、クラス テンプレートの基本クラスがテンプレート パラメーターに依存する場合、基本クラスのスコープは、非修飾名の検索中に検査されません..."

これは、非修飾名を使用する場合、基本クラスで定義された typedef が派生クラスのスコープで自動的に使用できないことを意味します。この問題を解決するには、typedef を完全修飾する必要があります。

typename A<T>::Vec_t v;
ログイン後にコピー

typename キーワードに続いて typedef の完全修飾名を使用することで、基本クラスの typedef を使用することを明示的に指定します。 。これは期待どおりに機能し、派生クラス内のベクトル typedef にアクセスできるようになります。

以上がC の派生クラス テンプレートの基本クラス Typedef にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート