1. ホーム
  2. c++

[解決済み] テンプレート <unsigned int N>とは何ですか?

2022-07-08 03:33:42

質問

テンプレートを宣言するとき、私はこのようなコードを持っていることに慣れています。

template <class T>

しかし この質問では を、使っていた。

template <unsigned int N>

コンパイルされることを確認しました。しかし、それは何を意味するのでしょうか?それは非タイプパラメータですか?もしそうなら、型パラメータがないテンプレートはどうすればいいのでしょうか?

どのように解決するのですか?

型ではなく、整数のクラスをテンプレート化することは完全に可能です。 テンプレート化された値を変数に代入したり、他の整数リテラルと同じように操作したりすることができます。

unsigned int x = N;

実際、コンパイル時に評価するアルゴリズムを作ることができます ( ウィキペディア ):

template <int N>
struct Factorial 
{
     enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}