展开可变模板折叠表达式

问题描述 投票:0回答:1
template<typename... Ts>
using Type = std::variant<std::shared_ptr<T1>, std::shared_ptr<T2>, std::shared_ptr<Tn>>;

如何使用可变参数模板和折叠表达式来做到这一点?

我尝试这样的事情:

template<typename... Ts>
using Type = std::variant<((std::shared_ptr<Ts>), ...)>;`

但它无法编译。

c++ variadic-templates
1个回答
2
投票

以下为我编译

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

这里所述

后跟省略号的模式,其中至少一个参数包的名称至少出现一次,被扩展为零个或多个以逗号分隔的模式实例,其中参数包的名称被每个包中的元素,按顺序

这里我们的模式是

std::shared_ptr<Ts>
,展开成
std::shared_ptr<T1>, std::shared_ptr<T2>, std::shared_ptr<Tn>

© www.soinside.com 2019 - 2024. All rights reserved.