假设我有两个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/