考慮一下:指定默認模板
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
@ sehe要包分成特定小包裝(如上面的例子,但更復雜的),但我需要包含所有的小包裝,也就是默認模板的作用。 – prestokeys
如何。特別。如果你說'foo :: type'應該是什麼結果?如果這不是正確的用法,那是什麼?那會是什麼結果(假設你神奇地有一個工作實現) –
sehe