将模板类型转换为相同类型但模板化不同的别名
Alias that transforms a template type to the same type but templated on something different
我有一个
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>>;
但是有没有另一种更简洁的方式 + 不做上述假设?
尝试
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;
我有一个
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>>;
但是有没有另一种更简洁的方式 + 不做上述假设?
尝试
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;