簡體   English   中英

如何在類模板整數列表上展開?

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

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