c++ - 检查两个模板模板参数是否相同
问题描述
是否有一种标准 ( 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");
};
这一切都很好,直到T1
或T2
不能用我选择的随机类型(这里void
)实例化。
我想我可以编写自己的类型特征is_same_template
,但我有点想绕过它。
解决方案
不,那里没有。但是你可以很容易地写出你自己的特质:
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");
推荐阅读
- watir - 使用 WATIR 截取全屏
- docker - 当 Dockerfile 命令被缓存时
- angular - Json 对象发送以保存服务返回错误“您在预期流的位置提供了‘未定义’。”
- android - 从 Flutter 项目构建 APK 时出错
- oracle - 从表中删除需要很长时间以及如何找到原因
- reporting-services - SSRS 计算两次 HH:MM:SS 之间的时间差
- ruby-on-rails - 路由错误 - 没有路由匹配 [POST] "/coffee/new"
- python - 如何在 Python 中过滤 json 文件的嵌套字典
- node.js - Node.js 模块没有执行?
- mysql - 从天气数据中找出是否有热带之夜