模板非類型參數
模板非類型參數是一種特殊類型的參數,它不替換類型,而是由值替換。 非類型參數可以是以下任何一種:
值可以是具有整數類型或列舉(enumeration)
pointer或reference class object
pointer或reference function
pointer或reference class member function
std::nullptr_t
在下面的範例中,我們建立一個non-dynamic(static)array class,使用類型參數和非類型參數。 type參數控制static array的數據類型,non-type參數控制static array的大小。
#include <iostream>
template <class T, int size> // size is the 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 <class 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;
}
參考
https://www.learncpp.com/cpp-tutorial/134-template-non-type-parameters/
沒有留言:
張貼留言