我有一個
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>>;
但是還有另一種更清潔的方式 不做出上述假設嗎?
uj5u.com熱心網友回復:
嘗試
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;
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/473686.html
上一篇:使用g “不允許顯式模板引數串列”,但使用clang 編譯?
下一篇:從不完整型別實體化的模板繼承
