網頁

2019年2月6日 星期三

Template non-type parameters

模板(template) parameters除了是一種類型(type)外,Template classes和functions可以使用另一種稱為模板非類型參數(template non-type parameters)。


模板非類型參數

模板非類型參數是一種特殊類型的參數,它不替換類型,而是由值替換。 非類型參數可以是以下任何一種:

值可以是具有整數類型或列舉(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/

沒有留言:

張貼留言