假设我有两个struct:

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);
}

关于c++ - 完美转发对象成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8570655/

10-13 06:59