我遇到以下問題。我有一些類將輸入數組映射到輸出數組。我想有float類型,以及陣列作爲模板參數的長度,所以映射類是這樣的:類型,積分常量和模板模板參數的變量模板
template <typename FloatType, std::size_t input, std::size_t output>
class Mapper
{};
template <typename FloatType, std::size_t input, std::size_t output>
class FirstMapper : public Mapper<FloatType, input, output>
{};
template <typename FloatType, std::size_t input, std::size_t output>
class SecondMapper : public Mapper<FloatType, input, output>
{};
到目前爲止好。我的目標是編寫一個堆疊這些Mapper類的不同實例的類。我希望能寫出這樣的代碼:
StackedMapper<
double, // the FloatType, obviously
input_1, // the size of the first mapper's input array
FirstMapper, // the template template type of the first mapper
input_2, // the size of the first mapper's output and
// second mapper's input array
SecondMapper, // the template template type of the second mapper
input_3, // the size of the second mapper's output and
// third mapper's input array
FirstMapper, // the template template type of the third mapper
output // the size of the third mapper's output array
// ... any additional number of Mapper classes plus output sizes
> stacked_mapper;
內部,StackedMapper
類應該映射器實例存儲在std::tuple
。我期望元組有以下類型:
std::tuple<
FirstMapper<double, input_1, input_2>,
SecondMapper<double, input_2, input_3>,
FirstMapper<double, input_3, output>
// ...
>;
如省略號所示,我想添加任意數量的Mapper類。正如您從註釋中看到的那樣,一個圖層的輸出大小等於下一個圖層的輸入大小。對於堆棧中的所有映射器,浮點類型只能定義一次。
有沒有人有想法?我見過this問題,它解決了交替類型(積分常量和類型)問題,但它似乎不適用於模板模板參數,因爲我總是遇到類似expected a type, got 'FirstMapper'
的錯誤。
有沒有人有這個想法?
如果您對所有內容使用類型,而不是模板模板參數和非類型模板參數,則更方便。閱讀@ Yakk元編程答案中的一個例子,例如http://stackoverflow.com/a/32056973/ – dyp
@dyp:感謝發佈該鏈接,這是一個好的 –