【发布时间】:2016-05-31 01:47:06
【问题描述】:
假设我有一个名为 List 的代理类,它只不过是一堆 typenames 的持有者:
template<typename... items> class List {
constexpr size_t SizeOf = /*Magic code that determines the length*/;
};
假设我有另一个类应该带到Lists 并输出一个版本,其中较小的一个用null_ts 填充:
template<class flist,class slist>
class Pad{
typedef /*Undertermined*/ Flist;
typedef /*Undertermined*/ Slist;
};
唯一真正的问题是破坏递归....通常在模板递归中你只需要专门化然后你就可以结束它。
这里有点不同,因为没有办法(至少我可以看到)通过模板减速来判断两个列表之间的区别。
我尝试使用std::conditional 来结束循环,但这不起作用。
这是一个例子:
template<int x>
class Mine{
typedef std::conditional<x == 12, Mine<x>::value, Mine<x+1>::value> value;
};
即使我有x==12 条件,它仍然需要(或想要)清除Mine<x+1>::value。
那么这个场景的一般策略是什么?
【问题讨论】:
标签: c++ templates recursion template-meta-programming