Предположим, у меня есть две struct
s:
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));
}
}
Приведенный выше код иллюстрирует мое намерение, но не очень масштабируемый, поскольку количество параметров растет. Есть ли способ заставить его работать для идеальной пересылки и сделать его масштабируемым?