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>), ...)>;`
但编译不了
xriantvc1#
下面是compiled
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>
std::shared_ptr<Ts>
std::shared_ptr<T1>, std::shared_ptr<T2>, std::shared_ptr<Tn>
1条答案
按热度按时间xriantvc1#
下面是compiled
正如这里所说
后面跟着省略号的模式(其中至少一个参数包的名称至少出现一次)被扩展为零个或多个模式的逗号分隔示例化,其中参数包的名称被包中的每个元素替换,按顺序
这里我们的模式是
std::shared_ptr<Ts>
,它被扩展为std::shared_ptr<T1>, std::shared_ptr<T2>, std::shared_ptr<Tn>