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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |