Я пытаюсь изменить порядок последовательности параметров template-variadic std::size_t
, основываясь на ответе, найденном в предыдущей теме .Но по какой-то причине это не работает.
Вот обычная функция печати переменных переменных:
template<typename = void>
void print(void)
{
std::cout << std::endl;
}
template<typename... T>
void print(std::size_t index, T... indexes)
{
std::cout << index << ' ';
print(indexes...);
}
А вот цепочка классов шаблонов:
template<std::size_t... Indexes>
class NonRecursiveClass
{
public:
void show(void)
{
print(Indexes...);
}
};
template<std::size_t Count, std::size_t Index, std::size_t... Indexes>
class RecursiveClass;
template<std::size_t Count, std::size_t Index, std::size_t... Indexes>
class RecursiveClass : public RecursiveClass<Count - 1u, Indexes..., Index>
{
};
template<std::size_t Index, std::size_t... Indexes>
class RecursiveClass<0u, Index, Indexes...> : public NonRecursiveClass<Index, Indexes...>
{
};
По сути,Идея состоит в том, что если вы создадите, например, объект RecursiveClass<5u, 10u, 1u, 6u, 478u, 23u>
, он будет наследоваться от объекта NonRecursiveClass<23u, 478u, 6u, 1u, 10u>
, и у вас будет последовательность параметров std::size_t
в обратном направлении во время компиляции.
К сожалению, когда я пытаюсьэто, я все еще получаю оригинальный заказ.Вот моя основная функция:
int main(void)
{
RecursiveClass<5u, 10u, 1u, 6u, 478u, 23u> foo;
foo.show();
return 0;
}
А вот и вывод:
10 1 6 478 23
Что я сделал не так?