ホームページ > バックエンド開発 > C++ > 継承されたクラスは、C のテンプレート化された親クラスの保護された変数にどのようにアクセスできますか?

継承されたクラスは、C のテンプレート化された親クラスの保護された変数にどのようにアクセスできますか?

Mary-Kate Olsen
リリース: 2024-12-06 20:16:12
オリジナル
614 人が閲覧しました

How Can Inherited Classes Access Protected Variables in Templated Parent Classes in C  ?

テンプレート化された親クラスから継承された変数にアクセスする

提供されたコード スニペットは、継承されたクラス Bar がそのクラスの保護された変数にアクセスしようとするシナリオを示しています。親クラス Foo はテンプレート化されたクラスです。ただし、コンパイラはエラーを生成するため、コンパイラが標準に準拠しているかどうかについて混乱が生じます。

C 標準によれば、テンプレート内の非修飾名は非依存とみなされ、テンプレートの定義時に解決される必要があります。 。特殊な基本クラスのテンプレートはテンプレート定義中に使用できない可能性があるため、未解決の非修飾名はエラーになります。

これは、Bar がアクセスできる例に見られるように、基本クラスで宣言された変数と関数の両方に当てはまります。修飾名を使用するか、宣言を使用します。後者では、派生クラス内での非修飾アクセスが許可され、初期エラーが解決されます。

たとえば、次のコード変更により問題が解決されます。

template<class T>
int Bar<T>::Perna(int u) {
  int c = Foo<T>::a * 4;  // Qualified name
  c = this->a * 4;        // Pointer to own instance
  using Foo<T>::a;
  c = a * 4;               // Using declaration
}
ログイン後にコピー

検索ルールを明確にし、代替ソリューションを提供することにより、この説明は、テンプレート解決の微妙な違いを強調し、開発者がコンパイラーの動作の背後にある理論的根拠を理解するのに役立ちます。

以上が継承されたクラスは、C のテンプレート化された親クラスの保護された変数にどのようにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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