假设我们有一个名为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而不必两次传递类型?我尝试使用元组来隐藏参数,但是我也不能让它工作。
谢谢你的帮忙!
发布于 2021-10-04 09:25:14
翻转您的CollectionHandler声明,通过模板专门化剖析TypeCollection:
template <class TypeCollection>
class CollectionHandler;
template <class... Types>
class CollectionHandler<TypeCollection<Types...>> { };发布于 2021-10-04 09:24:41
TypeCollecion<A, B, C>不是模板。它是一种类型。如果你改变了
template<template<typename ...> class Collection, typename ...Types>
class CollectionHandler {};至
template<typename Collection>
class CollectionHandler {};然后,您可以使用TypeCollecion<A, B, C>作为参数。TypeCollection可能应该提供成员别名来访问A、B和C。
当您实际想要使用类型作为参数时,您不需要模板模板参数(此类型是否为模板的实例化并不重要)。
https://stackoverflow.com/questions/69433613
复制相似问题