テンプレート化された親クラスから継承された変数にアクセスする
提供されたコード スニペットは、継承されたクラス 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 サイトの他の関連記事を参照してください。