【发布时间】:2018-10-23 04:22:52
【问题描述】:
我正在尝试根据在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
我做错了什么?
【问题讨论】:
标签: c++ variadic-templates c++17 template-meta-programming