加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从元组派生类

发布时间:2020-12-16 09:45:32 所属栏目:百科 来源:网络整理
导读:我有一个像这样的std :: tuple: typedef std::tuplet1,t2,t3 tuple_t; 现在,我想将t3_tuple转换为类似的元组: typedef std::tuple Tt1,Tt2,Tt3 derived_tuple_t; 在我的例子中,例如,t1,t2和t3是基元,T是std :: stack.一般来说,假设可能有t4等等. 当然,我的
我有一个像这样的std :: tuple:

typedef std::tuple<t1,t2,t3> tuple_t;

现在,我想将t3_tuple转换为类似的元组:

typedef std::tuple< T<t1>,T<t2>,T<t3> > derived_tuple_t;

在我的例子中,例如,t1,t2和t3是基元,T是std :: stack.一般来说,假设可能有t4等等.

当然,我的第二个定义已经解决了这个问题,但我希望导出是自动的:只给出T和tuple_t,建立我的derived_tuple_t.像这样:

template <class T,class tuple_t> using derived_tuple_t = std::tuple</*???*/>;

这样的事情可能吗?也许简短的解决方案?

解决方法

使用模板模板参数的一些部分专业化应该完成这项工作(一般化为可变参数模板,而不仅仅是元组):

template<template<class...> class TT,class ArgsT>
struct make_over;

template<template<class...> class TT,template<class...> class ArgsT,class... Ts>
struct make_over<TT,ArgsT<Ts...>>{ using type = ArgsT<TT<Ts>...>; };

template<template<class...> class TT,class ArgsT>
using MakeOver = typename make_over<TT,ArgsT>::type;

请注意,对于不使用真实可变参数模板的stdlib,这可能会出现问题,并使用宏机制和默认模板参数(如MSVC)来模拟它.

Live example.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读