19.2 Template non-type parameters
https://www.learncpp.com/cpp-tutorial/template-non-type-parameters/
前回の授業ではtemplatetypeparameterを用いてtype独立関数とclassを作成することを学びました.
しかし、templatetypeparameterは唯一の用途ではありません.
template classとfunctionはnon-type parameterという名前の
A non-type parameter can be any of the following types: An integral type An enumeration type A pointer or reference to a class object A pointer or reference to a function A pointer or reference to a class member function std::nullptr_t A floating point type (since C++20) 次の例ではstatic arrayクラスで使用します.
main関数はint,12をパラメータとして送信する
non-type parameterはこのように使用できます
non-constexpr値でnon-type parameterを設定するとエラーが発生します
前回の授業ではtemplatetypeparameterを用いてtype独立関数とclassを作成することを学びました.
しかし、templatetypeparameterは唯一の用途ではありません.
template classとfunctionはnon-type parameterという名前の
Non-type parameters
A non-type parameter can be any of the following types:
#include <iostream>
template <typename T, int size> // size is an integral non-type parameter
class StaticArray
{
private:
// The non-type parameter controls the size of the array
T m_array[size] {};
public:
T* getArray();
T& operator[](int index)
{
return m_array[index];
}
};
// Showing how a function for a class with a non-type parameter is defined outside of the class
template <typename T, int size>
T* StaticArray<T, size>::getArray()
{
return m_array;
}
int main()
{
// declare an integer array with room for 12 integers
StaticArray<int, 12> intArray;
// Fill it up in order, then print it backwards
for (int count { 0 }; count < 12; ++count)
intArray[count] = count;
for (int count { 11 }; count >= 0; --count)
std::cout << intArray[count] << ' ';
std::cout << '\n';
// declare a double buffer with room for 4 doubles
StaticArray<double, 4> doubleArray;
for (int count { 0 }; count < 4; ++count)
doubleArray[count] = 4.4 + 0.1 * count;
for (int count { 0 }; count < 4; ++count)
std::cout << doubleArray[count] << ' ';
return 0;
}
templateのパラメータにint sizeというパラメータが存在しますmain関数はint,12をパラメータとして送信する
non-type parameterはこのように使用できます
non-constexpr値でnon-type parameterを設定するとエラーが発生します
template <int size>
class Foo
{
};
int main()
{
int x{ 4 }; // x is non-constexpr
Foo<x> f; // error: the template non-type argument must be constexpr
return 0;
}
xの値は4ですが、xはnon-constexprなのでエラーが発生しますReference
この問題について(19.2 Template non-type parameters), 我々は、より多くの情報をここで見つけました https://velog.io/@ikmy0ung/19.2-Template-non-type-parametersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol