首页 > 解决方案 > 检查两个模板模板参数是否相同

问题描述

是否有一种标准 ( std) 方法可以检查两个模板而不是两个模板实例是否相等?

当我有两个模板模板参数时,我想检查它们是否相等,理想情况下,我想写

template <template <class> class T1, template <class> class T2>
class Foo{
  static_assert(std::is_same<T1, T2>::value, "T1 and T2 must be same");
};

但不能,因为std::is_same采用类型模板参数而不是模板模板参数。

我目前的“解决方案”是我用随机类型(例如void)实例化,然后检查是否相等:

template <template <class> class T1, template <class> class T2>
class Foo{
  static_assert(std::is_same<T1<void>, T2<void>>::value, "T1 and T2 must be same");
};

这一切都很好,直到T1T2不能用我选择的随机类型(这里void)实例化。

我想我可以编写自己的类型特征is_same_template,但我有点想绕过它。

标签: c++

解决方案


不,那里没有。但是你可以很容易地写出你自己的特质:

template <template <typename...> typename, template <typename...> typename>
struct is_template_same : std::false_type {};

template <template <typename...> typename TT>
struct is_template_same<TT, TT> : std::true_type {};

template <template <typename...> typename TT, template <typename...> typename UU>
inline constexpr bool is_template_same_v = is_template_same<TT, UU>::value;

接着:

static_assert(is_template_same_v<T1, T2>, "T1 and T2 must be the same");

推荐阅读