其他分享
首页 > 其他分享> > c – 从元组派生类

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)来模拟它.

Live example.

标签:template-templates,c,c11,templates,variadic-templates
来源: https://codeday.me/bug/20190728/1567121.html