将模板类型转换为相同类型但在不同的模板上进行模板化的别名



我有一个

template <typename T, typename U>
struct A;

template <typename U>
struct B;

如何创建别名,将A<T, U>类型转换为A<T, B<U>>类型?例如:

template <typename TypeA>
using ModifiedTypeA = TypeA<T, B<U>>; // <--- I don't know how to get T and U from TypeA

其中ModifiedTypeA只需要在TypeA上模板化?

我在想,如果TypeA总是保证有成员别名,上述可以实现

template <typename T_, typename U_>
struct A
{
using T = T_;
using U = U_;
};

,然后做

template <typename TypeA>
using ModifiedTypeA = TypeA<typename TypeA::T, B<typename TypeA::U>>;

但是有没有另一种更干净的方法+不做上述假设?

Try

template <typename TypeA, template<typename> typename TemplateB>
struct ModifiedTypeAWtihImpl;
template <template<typename, typename> typename TemplateA, 
typename T, typename U,
template<typename> typename TemplateB>
struct ModifiedTypeAWtihImpl<TemplateA<T, U>, TemplateB> {
using type = TemplateA<T, TemplateB<U>>;
};
template <typename TypeA, template<typename> typename TemplateB>
using ModifiedTypeAWtih = typename ModifiedTypeAWtihImpl<TypeA, TemplateB>::type;

演示

相关内容

  • 没有找到相关文章

最新更新