检查两个模板参数是否相同
Check if two template template parameters are the same
是否有一种标准(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");
相关文章:
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 如何检查给定的参数是否为 cv::noArray()?
- 如果返回 -1,时间() 的参数是否被修改?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 检查两个模板参数是否相同
- 空函数的参数是否加载到缓存中?
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 了解'this'或其他参数是否为右值
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- shared_ptr构造函数参数是否应按值传递
- 如何检查模板参数是否为给定值?
- 使用聚合初始化模拟默认函数参数是否存在任何陷阱?
- 在对象序列化期间添加额外参数是否有更好的方法?
- 通过 ssh 发送参数.是否有非阻塞输入函数?
- 如何检查运算符 != 模板参数是否存在 C++ 17?
- 常量引用函数参数:是否可以禁止临时对象?
- 如何检查模板参数是否为 std::variant?
- 是否可以确定函数的参数是否已签名或无符号,以实现可能性超载函数
- 移动 l 值参考参数是否是一种不好的做法?
- 显式指定通用 lambda 的 operator() 模板参数是否合法?