ホームページ  >  記事  >  バックエンド開発  >  C++ 構文エラー: テンプレート パラメーターでは非テンプレート型を使用できません。解決方法は?

C++ 構文エラー: テンプレート パラメーターでは非テンプレート型を使用できません。解決方法は?

王林
王林オリジナル
2023-08-22 11:37:501130ブラウズ

C++ 構文エラー: テンプレート パラメーターでは非テンプレート型を使用できません。解決方法は?

C テンプレート プログラミングでは、テンプレート以外のクラスをテンプレート パラメーターとして使用できますが、この使用には一定の制限があります。非テンプレート型をテンプレート パラメーターとして使用しようとすると、「非テンプレート型はテンプレート パラメーターでは使用できません。」というエラーが発生する場合があります。このエラーは通常、C コンパイラが非テンプレート型の処理方法を決定できないために発生します。

この記事では、このエラーの原因とその修正方法について説明します。まずこのエラーの原因を調査し、次にそれを解決する方法について説明します。

エラー理由

次のコードを記述すると: コード内の

template <class T, int N>
class MyClass {
    T array[N];
    // some code here
};

MyClass<int, 10> myClass;

MyClass は、2 つのテンプレート パラメーター ## を持つテンプレート クラスです。 #TNT はデータ型、N は整数です。コンパイラによる処理後、myClassMyClass クラスのインスタンスになります。ここで、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 を定義するとき、MyClass5MyClass6 の 2 番目のテンプレート パラメーターとして使用できます。

この方法を使用すると、「テンプレート パラメーターでは非テンプレート型を使用できません」というエラーを効果的に解決できます。このようにして、非テンプレート タイプをテンプレート タイプに変更して、テンプレート パラメータで使用できるようにすることができます。

結論

C でのテンプレート プログラミングのプロセスでは、テンプレート以外のクラスをテンプレート パラメーターとして使用しようとする場合がありますが、この使用には制限があります。コンパイラーはこの非テンプレート型の処理方法を決定できないため、非テンプレート クラスをテンプレート パラメーターとして直接使用することはできません。しかし、非テンプレート型をテンプレート型に変更することで、この問題を解決できます。

以上がC++ 構文エラー: テンプレート パラメーターでは非テンプレート型を使用できません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。