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