传递模板模板参数



假设我们有一个名为TypeCollection的类,它包含以下类型的打包模板:

template<typename ...Types>
class TypeCollection {};

如果我们有一个类模板一个TypeCollection你需要做这样的事情:

template<template<typename ...> class Collection, typename ...Types>
class CollectionHandler {};

将像这样实例化:

CollectionHandler<TypeCollecion, A, B, C>

这不是很好,因为我们必须传递类型A、B和C两次来进行模板演绎。我的问题是,是否有一种方法可以做到这一点,而不必传递类型两次:

CollectionHandler<TypeCollecion<A, B, C>>

然而,我似乎不能得到这个工作。我尝试了几件事,我意识到你不能传递一个模板类作为参数:

CollectionHandler<TypeCollecion<A, B, C>>  // Error: Template argument for template template parameter must be a class template or type alias template

是否有一种方法来实例化CollectionHandler而不必传递类型两次?我尝试用元组来隐藏参数,但我也不能让它工作。

谢谢你的帮助!

翻转您的CollectionHandler声明,通过模板专门化剖析TypeCollection:

template <class TypeCollection>
class CollectionHandler;
template <class... Types>
class CollectionHandler<TypeCollection<Types...>> { };

TypeCollecion<A, B, C>不是模板。它是一种类型。如果你改变

template<template<typename ...> class Collection, typename ...Types>
class CollectionHandler {};

template<typename Collection>
class CollectionHandler {};

则可以使用TypeCollecion<A, B, C>作为参数。TypeCollection应该提供成员别名来访问ABC

当你真正想要使用一个类型作为参数时,你不需要模板模板形参(这个类型是否是模板的实例化并不重要)。

相关内容

  • 没有找到相关文章

最新更新