加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 模板模板功能和参数推导

发布时间:2020-12-16 05:02:36 所属栏目:百科 来源:网络整理
导读:我遇到了模板模板和参数扣除的问题.这是代码: templatetypename U,templatetypename class Tvoid test(TU t){ ...} 我希望这可以接受左值和左值,但只适用于右值.崩溃规则“T = T”在这种情况下不适用? 当然,我也可以声明左值引用函数,但是使代码的可读性降
我遇到了模板模板和参数扣除的问题.这是代码:
template<typename U,template<typename> class T>
void test(T<U>&& t)
{
  ...
}

我希望这可以接受左值和左值,但只适用于右值.崩溃规则“T&&& = T&”在这种情况下不适用?

当然,我也可以声明左值引用函数,但是使代码的可读性降低.

如果你问我为什么需要这个就是使用static_assert来检查T是否是一个特定的类.如果有一种更简单的方法,我会很乐意改变我的代码,但我想知道模板模板是否可以这种方式使用.

谢谢

解决方法

与可以推断为引用类型的typename T不同,模板< typename> T类只能被推断为类模板,因此T< U>总是推导出一种对象类型.

您可以在T上编写模板化的函数,然后在static_assert中解压缩模板类型:

template<typename T> struct is_particular_class: std::false_type {};
template<typename U> struct is_particular_class<ParticularClass<U>>: std::true_type {};

template<typename T> void test(T &&) {
  static_assert(is_particular_class<std::remove_reference<T>::type>::value,"!");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读