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

如何用可变参数模板与折叠表达式实现指定std::variant类型定义?

正确实现模板别名Type的方法

你的核心需求是定义一个模板别名,将传入的参数包中每个类型都包装成std::shared_ptr后,组合成std::variant类型。

正确代码实现

#include <variant>
#include <memory>

template<typename... Ts>
using Type = std::variant<std::shared_ptr<Ts>...>;

原代码错误原因

你之前写的((std::shared_ptr<Ts>), ...)误用了逗号表达式的折叠。逗号表达式的特性是:会依次执行所有子表达式,但最终只返回最后一个子表达式的结果。这意味着当参数包包含多个类型时,这个折叠表达式最终只会生成最后一个std::shared_ptr<Tn>类型,而std::variant需要的是一组类型的列表,不是单个类型,因此编译会报错。

直接展开std::shared_ptr<Ts>...就足够了——模板参数包的展开机制会自动把每个Ts分别替换为std::shared_ptr<Ts>,并作为独立的模板参数传递给std::variant,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:05