有没有办法可以使用using
关键字替换嵌套模板类?像这样的东西
template <typename... Types>
struct Something {
template <typename... TypesTwo>
struct Another {};
};
template <typename... Types>
template <typename... TypesTwo>
using Something_t = typename Something<Types...>::template Another<TypesTwo...>;
int main() {
Something_t<int><double>{};
return 0;
}
这个答案template template alias to a nested template?显示了一种方法,但如果两个参数包都是可变参数,那么它将不再有效,因为编译器不知道从哪里开始以及在何处结束类型列表。
答案 0 :(得分:2)
不完全是你问的但是...如果你可以将你的可变参数类型列表包装为元组(或类似类)的参数......
#include <tuple>
template <typename ... Types>
struct Something
{
template <typename ... TypesTwo>
struct Another {};
};
template <typename, typename>
struct variadicWrapper;
template <typename ... Ts1, typename ... Ts2>
struct variadicWrapper<std::tuple<Ts1...>, std::tuple<Ts2...>>
{ using type = typename Something<Ts1...>::template Another<Ts2...>; };
template <typename T1, typename T2>
using Something_t = typename variadicWrapper<T1, T2>::type;
int main()
{
Something_t<std::tuple<int>, std::tuple<double>>{};
}
答案 1 :(得分:0)
不是一个独立的答案,而是对max66答案的补充:
你可以尝试这个:
template<typename ... TT, typename ... TTT>
using Alias = typename Something<TT...>::Another<TTT...>;
起初看起来真的很好,不是吗?
然而问题是,已经有一个模板参数:
Alias<int> a;
现在是哪一个? Something<int>::Another<>
或Something<>::Another<int>
?如果您有更多参数,如何分发?没有机会获得有意义的解决方案。所以不,你不能直接做到这一点,你必须帮助自己如max66提出的技巧......