提取可变参数模板参数包,并将其用于类型特征元函数中的另一个可变参数模板

Extract variadic template parameter pack and use it in another variadic template in a type traits meta-function?

本文关键字:参数 变参 特征 函数 类型 另一个 提取 用于      更新时间:2023-10-16

我想确定是否有任何可变参数类模板是另一个类的基础。 通常我会使用 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>
{};

这可能吗?

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>
{};

希望对您有所帮助!

你快到了,但尝试一下部分专业化:

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 >
{};