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