C は、プログラマーがさまざまなデータ型やアルゴリズムに共通するコードを迅速に作成できるようにする多くのテンプレートを備えた、広く使用されているプログラミング言語です。ただし、テンプレートを使用するときにいくつかのコンパイル エラーが発生することもあります。その 1 つは、「テンプレート パラメーターはこの型には適用できません」です。この記事では、このエラーの背景、原因、解決策について詳しく説明します。
背景
C のテンプレートは、さまざまな種類のコードを生成するために使用できる一般的なプログラミング パターンです。たとえば、テンプレートを使用して、さまざまなタイプのパラメーターを受け取り、そのタイプに基づいてさまざまなコードを動的に呼び出すことができる一般的な関数を作成できます。
C のテンプレート パラメーターは、型パラメーターと非型パラメーターの 2 つのタイプに分類されます。型パラメータはテンプレートで使用されるデータ型を指し、非型パラメータは定数や関数ポインタなどを指します。これらのパラメータはコンパイル時に決定する必要があります。
通常、テンプレートで使用される型パラメーターはさまざまなデータ型に適用できるはずですが、コンパイル エラーが発生し、「テンプレート パラメーターはこの型には適用できません」というメッセージが表示されることがあります。次に、このエラーの原因と解決策を紹介します。
原因
「テンプレート パラメーターはこの型には適用できません」エラーは通常、次の理由によって発生します:
テンプレートを定義する場合、テンプレート パラメーターの型は、渡す必要があるデータ型に準拠する必要があります。渡されたデータ型がテンプレート パラメーターの型と一致しない場合、エラーが報告されます。
たとえば、次のコードでは、テンプレート関数を定義し、関数内でテンプレート パラメーター T を使用します。
template <typename T> void print(T value) { cout << value << endl; }
次に、この関数を呼び出し、文字列をパラメーターとして渡します。エラーが報告されます:
print("hello"); // 模板参数不适用于这个类型
これは、テンプレート関数のパラメーターの型が受信パラメーターの型と同じである必要があるためです。ここで渡されるのは文字列定数であり、テンプレート パラメーターの型です。がTなので、それは間違いです。
未定義の型をテンプレート パラメーターとして使用すると、コンパイラは型を見つけることができず、エラーが報告されます。
たとえば、次のコードでは、未定義の型パラメータを使用するテンプレート クラスを定義します。
template <typename T> class Test { public: void print(T value) { cout << value << endl; } }; int main() { Test<UnknownType> a; // 模板参数不适用于这个类型 return 0; }
上記のコードでは、UnknownType という名前の未定義の型を定義します。型を定義して渡します。テンプレート クラスを定義するときにテンプレート パラメーターとして使用すると、コンパイル時にエラーが発生します。
特定のデータ型のみを渡すことを許可するなど、テンプレート パラメーターに制限を追加することがあります。渡したデータ型が制限を満たしていない場合、エラーが報告されます。
たとえば、次のコードでは、整数型パラメータのみを渡すことを許可するテンプレート関数を定義します。
template <typename T> void print(T value) { static_assert(is_integral<T>::value, "只允许传入整数类型的参数"); cout << value << endl; } int main() { print(3.14); // 模板参数不适用于这个类型 return 0; }
上記のコードでは、is_integral テンプレートを使用して、テンプレートパラメータの型 整数型であるかどうか。そうでない場合は、エラーメッセージが出力されます。 print 関数を呼び出すときに浮動小数点パラメータを渡すため、コンパイルが失敗します。
解決策
テンプレート パラメーターがこの型に適していないというコンパイル エラーが発生した場合は、次の解決策を試すことができます:
このエラーが発生した場合は、まずテンプレート パラメータの型と受信パラメータの型が一致するかどうかを確認し、一致しない場合は変更する必要があります。
未定義の型をテンプレート パラメーターとして使用する場合は、プログラム内で型を定義するか、定義済みの型を使用する必要があります。タイプタイプ。
制限のあるテンプレートを使用する場合は、渡されたパラメーターの種類が要件を満たしていることを確認する必要があります。準拠していない場合は、パラメータのタイプを変更するか、制限を変更する必要があります。
概要
テンプレートは C の非常に重要な機能であり、これにより一般的なコードをより柔軟に記述することができます。ただし、テンプレートを使用すると、いくつかのコンパイル エラーも発生します。その 1 つは、「テンプレート パラメーターはこの型には適用できません」です。この記事では、読者が C テンプレートをよりよく理解して使用できるように、このエラーの原因と解決策をコード例とともに紹介します。
以上がC++ コンパイル エラー: テンプレート パラメーターはこの型には適用できません。どのように変更すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。