簡體   English   中英

第二個指定類型在模板typename聲明中的含義是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM