[英]What does a second specified type mean in a template typename declaration?
我很熟悉模板函數和類,但是當我看到它時,我不知道該怎么做。 我相信它可能是大多數日常語法,但我想得到一個很清楚的解釋,如果有人為我。 第二個uint32-t max意味着什么?它是如何在模板化類型中使用的?
繼承人的語法:
template <typename T, uint32_t max>
提前致謝。
這是模板的第二個參數。 模板參數不必是類型。 它們也可以是常量或模板。 因此,給定
template <typename T, uint32_t max> class TC {};
你會實例化它:
TC< MyClass, 42 > t;
(例如。)同樣,如果它是一個函數模板:
template <typename T, uint32_t max> void tf( T (&array)[max] );
類型推導可用於確定max
的(數值)值。
這樣的值模板不能只有任何類型; 它必須是整數類型或指針或引用。
第二個參數是uint32_t
而不是類型。 例如,它可以指定數組中的元素數。
template <typename T, uint32_t max>
struct Array
{
T data[max];
};
/* ... */
// usage example
Array<double, 10> a;
這樣您就可以將非類型值指定為模板參數。
一個很好的例子是std::array
,它有兩個模板參數,包含數據的類型和數組的大小。
例如
std:array<int, 256> my_array;
請注意,您不能將任何類型用作值模板參數,它基本上僅限於指針,引用和整數值。
您可以使用類型,整數值甚至模板作為模板參數。 有很多理由說明為什么以及如何使用它,並且不可能告訴你它在你的具體情況下做了什么。
例如,考慮這個函數返回指向數組末尾的指針(類似於C ++ 11中C數組的std::end
):
template <typename T, size_t k>
T * end(T (& arr)[k])
{
return arr + k;
}
第二個uint32_t max
意味着,在實例化模板時,您必須傳遞在編譯時已知的類型為uint32_t
的第二個模板參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.