检查是否使用相同的参数包实例化了两个可变参数派生类



在某些情况下,当你有一个基类和许多派生类时,所有这些派生类都编码一个可变参数包,如下所示

template<typename ... Args>
struct base
{};
template<typename ... Args>
struct derived_1: base <Args...>
{};
template<typename ... Args>
struct derived_2: base <Args...>
{};

如何检查是否使用相同的包实例化了不同派生类的对象。例如给定

derived_1<int,float,double> d1_obj;
derived_2<int,float,double> d2_obj;

我想要一种机制来告诉我两个对象是相等的,从某种意义上说,它们以相同的顺序包含相同的类型。

参数匹配时,您可以使用模板模板参数和部分专用化来执行此操作:

template <class T, class U>
struct same_args : std::false_type{};
template <template <typename...> class T, template <typename...> class U,
          typename... Ts>
struct same_args<T<Ts...>, U<Ts...>> : std::true_type{};

然后same_args<derived_1<int,float>, derived_2<int,float>>::value true.

现场演示

最新更新