c – 从元组派生类
作者:互联网
我有一个像这样的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)来模拟它.
标签:template-templates,c,c11,templates,variadic-templates 来源: https://codeday.me/bug/20190728/1567121.html