【发布时间】:2017-10-10 22:16:35
【问题描述】:
考虑一下:
template <typename Pack, template <typename...> class = std::tuple> struct foo;
template <template <typename...> class P, typename... Ts, template <typename...> class Q>
struct foo<P<Ts...>, Q> {
using type = Q<P<Ts>...>;
};
我已将 typedef 中的默认模板放置为 std::tuple 以进行编译,但我真正想要的是默认模板为 P,我不知道任何允许这样做的语法.我保持 typedef 简单来说明这一点,它试图将P 作为默认模板。所以我想出了以下看起来有点难看的解决方法:
template <typename Pack, template <typename...> class...> struct foo;
template <template <typename...> class P, typename... Ts, template <typename...> class Q>
struct foo<P<Ts...>, Q> {
using type = Q<P<Ts>...>;
};
template <template <typename...> class P, typename... Ts>
struct foo<P<Ts...>> {
using type = P<P<Ts>...>;
};
还有比这更好的方法吗?也许是一些我不知道的 c++17 语法?
【问题讨论】:
-
你想达到什么目的?一些给定的
foo<...>::type表达式的预期结果是什么? -
@sehe 将包拆分为特定的小包(如上面的示例,但更复杂),但我需要包含所有小包,因此默认模板的作用。跨度>
-
如何。具体来说。如果你说
foo<std::tuple, int, double, std::tuple>::type,结果应该是什么?如果这不是正确的用法,那是什么?结果会是什么(假设你神奇地有一个有效的实现)
标签: c++ c++11 templates variadic-templates c++17