折叠多个模板以用作模板模板参数

时间:2016-04-26 08:29:30

标签: c++ c++11

我一直在尝试使用C ++模板元编程。对于特定问题,我希望能够将模板作为模板参数传递。作为一个最小的例子,以下工作:

template <class T> class H : public T {};

template <template <class> class TT>
class Assembler
{
public:
  using Type = TT<void>;
};

template <class T> using Folded = H<H<H<T> > >;
using ThisWorks = Assembler<Folded>::Type;

但是,如果我没有明确地折叠其他模板,我的程序就无法编译:

using ThisDoesnt = Assembler<H<H<H> > >::Type;

为什么第二种形式不起作用(我可以猜测它为什么不起作用,但我真的很感激清楚的解释)?并且,是否有另一种替代方法(或更优雅的方式)将其他模板折叠成单一模板类型?

0 个答案:

没有答案