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

c – 完美转发对象的成员

发布时间:2020-12-16 05:22:29 所属栏目:百科 来源:网络整理
导读:假设我有两个结构体: struct X {};struct Y { X x; } 我有功能: void f(X);void f(X); 如何编写一个函数g(),使用Y或Y但完美转发X或X到f(): template typename Tvoid g(T t) { if (is_lvalue_referenceT::value) { f(t.x); } else { f(move(t.x)); }} 上面
假设我有两个结构体:
struct X {};
struct Y { X x; }

我有功能:

void f(X&);
void f(X&&);

如何编写一个函数g(),使用Y&或Y&&但完美转发X&或X&&到f():

template <typename T>
void g(T&& t) {
  if (is_lvalue_reference<T>::value) {
    f(t.x);
  } else {
    f(move(t.x));
  }
}

上面的代码说明了我的意图,但是随着参数数量的增长,它的扩展性不是很大.有没有办法让它的完美转发工作,使其可扩展?

解决方法

template <typename T>
void g(T&& t) {
  f(std::forward<T>(t).x);
}

(编辑:李大同)

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

    推荐文章
      热点阅读