5

可変個引数クラステンプレートが別のクラスのベースであるかどうかを確認したいと思います。通常はstd::is_base_ofを使用しますが、私のユースケースは適切ではないと思います。また、これを処理するためのstdまたはboostにすでに何かがあるかどうかはわかりません。可変個引数の基本クラステンプレートのパラメータパックを別の可変個引数のクラステンプレートから取得したいと思います。これが私がやりたいことをうまく説明するいくつかのサンプルコードです:

使用法:

is_variadic_base_of<
   VarClassTemplA
   , ClassDerivedFromA
   , VarClassTemplB //Has param pack I want to use with ClassA
>::value;

根性:

//test for variadic base of non-variadic
template <template<typename...> class A, typename B, typename... ArgsC>
struct is_variadic_base_of
: std::is_base_of<A<ArgsC...>, B>
{};

これは可能ですか?

4

2 に答える 2

6
template <template<typename...> class A, typename B, typename ArgsC>
struct is_variadic_base_of;

template <template<typename...> class A, typename B, 
          template<typename...> class C, typename ...ArgsC>
struct is_variadic_base_of<A, B, C<ArgsC...>> 
: std::is_base_of<A<ArgsC...>, B>
{};

それが役に立てば幸い!

于 2011-05-20T20:46:13.387 に答える
4

もうすぐですが、部分的な特殊化で試してみてください。

template<
    template<class...> class A, class B, class C
>
struct is_variadic_base_of;

// partial spec
template<
    template<class...> class A, class B,
    template<class...> class C, class... ArgsC
>
struct is_variadic_base_of< A,B,C<ArgsC...> >
  : std::is_base_of< A<ArgsC...>,B >
{};
于 2011-05-20T20:46:56.917 に答える