非類型的類模板參數(shù)在函數(shù)模板和類模板中,模板參數(shù)并不僅僅可以當(dāng)作類型,還可以當(dāng)作普通值。當(dāng)使用普通值作為模板參數(shù)時(shí),調(diào)用者就必須顯式的指定這些值。
例如 設(shè)置一個(gè)固定長度的列表MyList
。且模板參數(shù)有 數(shù)據(jù)類型和容量大小。
只有在增加新的元素時(shí)才會與容器大小進(jìn)行比較。第二個(gè)模板參數(shù)就是非類型的類模板參數(shù)。
具體代碼如下:
templateclass MyList
{MyList();
void PushBack();
void PopFront();
private:
list m_data;
uint32_t m_size;
};
templateMyList::MyList()
:m_size{0}
{}
templatevoid MyList::PushBack()
{if (m_size >= SIZE)
{throw out_of_range("MyList<>::PushBack() list is full! ");
}
// ... 功能代碼
}
templatevoid MyList::PopFront()
{// ... 功能代碼
}
非類型的函數(shù)模板參數(shù)同樣函數(shù)模板也支持非類型的模板參數(shù)。例如配合C++的算法庫algorithm
中的std::transform
方法進(jìn)行全部元素增加。
#include#include
#includeusing namespace std;
templateT addValue(T const& x)
{return x + VAL;
}
int main()
{vectorvec{9,5,1,2,3,4 };
transform(vec.begin(), vec.end(), vec.begin(), addValue);
for (const auto& elem : vec)
{cout<< elem<< " ";
}
cout<< endl;
return 0;
}
函數(shù)模板當(dāng)作回調(diào)函數(shù)使用時(shí),就需要顯式的指定函數(shù)模板參數(shù)類型。
非類型模板參數(shù)的局限性非類型模板參數(shù)也是有要求的,不是所有的類型都支持。
限制使用的場景你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧