C テンプレート プログラミングでは、テンプレート以外のクラスをテンプレート パラメーターとして使用できますが、この使用には一定の制限があります。非テンプレート型をテンプレート パラメーターとして使用しようとすると、「非テンプレート型はテンプレート パラメーターでは使用できません。」というエラーが発生する場合があります。このエラーは通常、C コンパイラが非テンプレート型の処理方法を決定できないために発生します。
この記事では、このエラーの原因とその修正方法について説明します。まずこのエラーの原因を調査し、次にそれを解決する方法について説明します。
エラー理由
次のコードを記述すると: コード内の
template <class T, int N> class MyClass { T array[N]; // some code here }; MyClass<int, 10> myClass;
MyClass
は、2 つのテンプレート パラメーター ## を持つテンプレート クラスです。 #T と
N。
T はデータ型、
N は整数です。コンパイラによる処理後、
myClass は
MyClass クラスのインスタンスになります。ここで、
T 型は
int,
です。 N 値は
10 です。
template <class T, int N, double D> class MyClass2 { // some code here }; MyClass2<int, 10, 3.14> myClass2;
double type 値
3.14 は、
MyClass2 クラスの 3 番目のテンプレート パラメーターとして使用されます。
double 型はテンプレート パラメーターではなく、テンプレート パラメーターで使用できないため、これは誤りです。
class MyClass3 { // some code here }; template <class T, MyClass3 myClass3> class MyClass4 { // some code here }; MyClass4<int, MyClass3> myClass4;
MyClass4 という名前のテンプレート クラスを定義します。2 番目のテンプレート パラメーターは、
myClass3 という名前のインスタンスです。クラス
MyClass3 のオブジェクトです。 。
myClass4 を定義するときは、
MyClass4 の 2 番目のテンプレート パラメーターとして
MyClass3 を使用します。ただし、
MyClass3 はテンプレート パラメーターではなく、テンプレート パラメーターで使用できないため、これは誤りです。
template <typename T> class MyClass5 { // some code here }; template <class T, template <typename> class N> class MyClass6 { N<T> myClass; // some code here }; MyClass6<int, MyClass5> myClass6;
MyClass6 クラスの 2 番目のテンプレート パラメーターがテンプレート クラスになっています。このようにして、テンプレート クラスをテンプレート パラメーターとして使用できます。
myClass6 を定義するとき、
MyClass5 を
MyClass6 の 2 番目のテンプレート パラメーターとして使用できます。
以上がC++ 構文エラー: テンプレート パラメーターでは非テンプレート型を使用できません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。