[英]How to expand on a class template integer list?
因此,我一直在嘗試學習有關c ++元編程的更多信息,並且一直試圖設計一個長度可變的元組。
我想做什么的想法是這樣的:
CustomArrays<float, 3, 2> arrays;
第一個參數' float
'是數組將存儲的數據類型。 以下參數是每個數組的長度。 我可以這樣構造一個帶有以下參數的結構:
template <typename T, uint... As> struct CustomArrays {};
我知道,如果我只接受一個參數而不是列表,我可以像這樣存儲數組:
template <typename T, uint A> struct CustomArrays { T data[A]; };
這就是我想要的,但是有了擴展的子類,類似於元組可以做的事情。 我正在考慮一些事情:
template <typename T, uint A> struct CustomArrays {};
template <typename T, uint A, uint... As>
struct CustomArrays : CustomArrays<T, As...> {
T data[A];
};
想法是讓這種擴展如下:
struct CustomArrays<float, 2, 3> : CustomArrays<float, 3> {
float data[2];
}
struct CustomArrays<float, 3> : CustomArrays {
float data[3];
}
struct CustomArrays {}
當然,由於我們使用不同的模板參數重新聲明了相同的結構,因此不會編譯。 我的問題是我怎樣才能達到預期的結果。
我建議您使用std::array
而不是自定義數組或舊的C樣式數組。
如果您想要std::array
的可變列表,則可以使用std::tuple
編寫類似
template <typename T, std::size_t ... Dims>
struct CustomArrays
{ std::tuple<std::array<T, Dims>...> data; };
您也可以嘗試使用C樣式的數組
template <typename T, std::size_t ... Dims>
struct CustomArrays
{ std::tuple<T[Dims]...> data; };
但我認為這不是一個好主意。
您可能正在尋找這樣的東西:
template <typename T, uint... As> struct ArrayType;
template <typename T>
struct ArrayType<T> {
typedef T type;
};
template <typename T, uint A, uint... As>
struct ArrayType<T, A, As...> {
typedef typename ArrayType<T, As...>::type type[A];
};
template <typename T, uint... As>
struct CustomArrays {
typename ArrayType<T, As...>::type data;
// CustomArrays<float, 3, 2>::data is of type float[3][2]
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.