【发布时间】:2021-11-24 17:43:54
【问题描述】:
假设我们有一个名为 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 而不必传递类型两次?我尝试使用元组来隐藏参数,但我也无法让它工作。
感谢您的帮助!
【问题讨论】:
-
"我们必须将类型
A、B和C传递两次才能进行模板推导" ?你只通过一次,(CTAD 也可以)。
标签: c++ templates c++17 variadic-templates