颠倒模板(整数)参数的顺序

时间:2018-05-13 09:14:35

标签: c++ variadic-templates c++17 template-meta-programming

我试图根据a previous thread中的答案,颠倒模板 - 可变参数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

我做错了什么?

0 个答案:

没有答案