作者:手机用户2502877197 | 来源:互联网 | 2023-07-25 12:55
我有一个像这样的std::tuple:typedefstd::tupletuple_t;现在,我想将t3_tuple转换为类似的元组:typedefstd::t
我有一个像这样的std :: tuple:
typedef std::tuple tuple_t;
现在,我想将t3_tuple转换为类似的元组:
typedef std::tuple, T, T > derived_tuple_t;
在我的例子中,例如,t1,t2和t3是基元,T是std :: stack.一般来说,假设可能有t4等等.
当然,我的第二个定义已经解决了这个问题,但我希望导出是自动的:只给出T和tuple_t,建立我的derived_tuple_t.像这样:
template using derived_tuple_t = std::tuple*???*/>;
这样的事情可能吗?也许简短的解决方案?
解决方法:
使用模板模板参数的一些部分专业化应该完成这项工作(一般化为可变参数模板,而不仅仅是元组):
template class TT, class ArgsT>
struct make_over;
template class TT, template class ArgsT, class... Ts>
struct make_over>{ using type = ArgsT...>; };
template class TT, class ArgsT>
using MakeOver = typename make_over::type;
请注意,对于不使用真实可变参数模板的stdlib,这可能会出现问题,并使用宏机制和默认模板参数(如MSVC)来模拟它.
Live example.