You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何实现可变模板模板参数的级联嵌套

C++可变类型级联嵌套模板实现

需求

实现可变参数别名模板Cascade,将传入的模板参数按顺序嵌套,生成T1<T2<T3<...>>>形式的类型,满足如下用例:

template <typename... T>
using Cascade = ???; // 目标输出 T1<T2<T3<...>>>

using Vector2D = Cascade<std::vector, std::vector, double>;
static_assert(std::is_same_v<Vector2D, std::vector<std::vector<double>>>);

实现代码

兼容C++11及以上标准的实现:

// 递归终止:仅剩余单个类型参数时,直接返回该类型
template <typename T>
struct CascadeImpl {
    using type = T;
};

// 递归逻辑:当前外层模板包裹后续参数生成的嵌套类型
template <template <typename> class Outer, typename... Rest>
struct CascadeImpl<Outer, Rest...> {
    using type = Outer<typename CascadeImpl<Rest...>::type>;
};

// 对外暴露的统一别名
template <typename... T>
using Cascade = typename CascadeImpl<T...>::type;

补充说明

  • 上述实现可以直接适配std::vector这类带默认模板参数的外层模板,模板的默认参数(比如std::vector的默认内存分配器)会自动生效,用例中的静态断言可以正常通过。
  • 如果需要适配接收多个非默认模板参数的外层模板,对应调整Outer的模板形参声明即可。
  • 递归展开顺序是从参数包最右侧的基础类型开始,逐层向外拼接,完全符合从外到内T1<T2<T3<...>>>的嵌套要求。

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:06:20