T<Us...>
のようなタイプのものを上位の種類としましょう。ある種の高級タイプのSomeType
(それはstd::vector<int>
と言いましょう)に対して、タイプ特性を使用してT
の部分(std::vector
)を抽出したいと思います。だから今、私はstd::vector<Foo>
を定義するためにHKT<SomeType>::type<Foo>
を行うことができます上位の種類のエイリアステンプレート
template<typename>
struct HKT;
template<template <typename...> class T, typename... Us>
struct HKT<T<Us...>> {
template<typename... Vs>
using type = T<Vs...>;
};
:私のような何かを行うことができます。
しかし、私は::type
部分を取り除こうとしています。ちょうどtypename std::enable_if<T>::type
のように、std::enable_if_t<T>
と省略することができます。私の場合はHKT_t<SomeType>
(それが存在すると仮定している)が型の代わりにエイリアステンプレートになるため、それが可能かどうかはわかりません。そして使用法はHKT_t<SomeType><Foo>
のようなものになるでしょう...これは本当に "エイリアステンプレートテンプレート"だと思います。
これを行う理由は、テンプレートテンプレートパラメータの引数として使用することです。たとえば、
template<template <typename...> class T>
void foo() {...}
foo<HKT_t<std::vector<int>>>();
これは可能ですか?
残念ながら、 'X'はテンプレートを指定できないため、 'HKT_t > '' std :: vector'のエイリアスにすることはできません。 –