C プログラミング言語では、派生クラスでテンプレートのインスタンス化された型を使用すると、「テンプレートのインスタンス化された型からの派生は許可されていません」というコンパイラ エラーが発生することがあります。このエラーの理由は、それ自体がクラスではない、テンプレートでインスタンス化された型から新しいサブクラスを派生しようとしているためです。この記事では、エラーの原因と問題の解決策を説明します。
1. エラーの原因
テンプレートは、クラスや関数の作成に使用でき、さまざまなデータ型に従ってインスタンス化できる一般的なプログラミング ツールです。テンプレートを使用する場合は、テンプレート パラメーターを指定する必要があります。 C では、クラス テンプレートを使用する場合、クラス名の後にパラメータ リストを続ける必要があります。例:
template<typename T> class MyClass { //... };
このクラス テンプレートを使用するときは、特定の型を指定する必要があります:
MyClass<int> myObj;
これにより、MyClass テンプレートの int 特化バージョンが作成されます。
ただし、派生クラスでテンプレートのインスタンス化型を使用すると、上記のエラーが発生します。例:
template<typename T> class MyClass { //... }; class MyDerivedClass: public MyClass{ //... };
このコードでは、「テンプレート インスタンスからの派生は許可されていません。」というエラーが表示されます。 " タイプ"。
このエラーの理由は、MyClass
2. 解決策
この問題を解決するには、テンプレート パラメーターを使用して、派生するクラスを指定します。たとえば、MyClass
template<typename T> class MyClass { //... }; templateclass MyDerivedClass: public MyClass { //... };
これにより、エラーが回避されます。
さらに、テンプレート エイリアス (テンプレート エイリアス) を使用して、この問題を解決することもできます。テンプレート エイリアスは、プログラムで使用するのに便利なテンプレートの新しい名前を提供できます。たとえば、上記のコードでは、テンプレート エイリアスを次のように定義できます。
template<typename T> using MyNewClass = MyClass<T>; class MyDerivedClass: public MyNewClass<int> { //... };
このようにして、クラスをテンプレート エイリアスから派生できます。
概要
C では、テンプレートの使用は非常に一般的な方法ですが、テンプレートを使用して派生クラスの型をインスタンス化すると、「テンプレートからの派生は許可されていません」というコンパイラ エラーが発生しやすくなります。インスタンス化された型」の問題。解決策は 2 つあります。1 つはテンプレート パラメーターを使用して派生するクラスを指定する方法で、もう 1 つはテンプレート エイリアスを使用してテンプレートに新しい名前を付ける方法です。上記の方法により、この問題は簡単に解決できます。
以上がC++ エラー: テンプレートから派生したインスタンス化型は許可されていません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。