は、以下のクラステンプレートを考えてみましょう:
template <typename... > struct typelist { };
これは、コンテナのメタプログラミングと同等です。そして、空のvector
またはmap
を持つことが有用であるのと同じように、空のtypelist
を持つと便利です。つまり、タイプがtypelist<>
のものです。このような構造の2つの使用例がここにあります。
これは型再帰の終了条件とすることができる:
void foo(typelist<>) { }
template <typename T, typename... Ts>
void foo(typelist<T, Ts...>) {
bar<T>();
foo(typelist<Ts...>{});
}
これは故障状態を示し、メタ関数のための「戻る」の値とすることができます。
我々はtypelistにフィルタメタ関数を書くために使用することができヘルパーです
template <typename F, typename T>
struct filter_one
: std::conditional_t<F::template apply<T>::value,
typelist<T>,
typelist<>>
{ };
:
template <typename F, typename TL>
struct filter;
template <typename F, typename... Ts>
struct filter<F, typelist<Ts...>>
: concat_t<filter_one<F, Ts>...>
{ };
はそれらの両方がtypelist<>
の非常に便利な機能であり、それはちょうど1クラステンプレートです。
「SomeClassTemplate <>」で何ができるのですか?それはかなり広いと私を襲う。 – Barry
一般的ですか?空の 'vector'で何ができますか? – Jarod42
@Barryあなたはpre-C++ 11を作成することができませんでした。アプリケーションや記事を見たことがありません。これは、あなたがあなたのコードで使用すべきではない事故であるかどうか疑問に思いますか?あるいは、用途があり、それは何ですか? –