完美转发对象成员
假设我有两个 struct
:
struct X {};
struct Y { X x; }
我有函数:
void f(X&);
void f(X&&);
如何编写一个采用 Y&
或 Y& 的函数
但分别完美转发 g()
;&X&
或 X&&
到 f()
:
template <typename T>
void g(T&& t) {
if (is_lvalue_reference<T>::value) {
f(t.x);
} else {
f(move(t.x));
}
}
上面的代码说明了我的意图,但随着参数数量的增加,扩展性不太好。有没有办法让它完美转发并使其可扩展?
Suppose I have two struct
s:
struct X {};
struct Y { X x; }
I have functions:
void f(X&);
void f(X&&);
How do I write a function g()
that takes Y&
or Y&&
but perfect forwarding X&
or X&&
to f()
, respectively:
template <typename T>
void g(T&& t) {
if (is_lvalue_reference<T>::value) {
f(t.x);
} else {
f(move(t.x));
}
}
The above code illustrate my intention but is not very scalable as the number of parameters grows. Is there a way make it work for perfect forwarding and make it scalable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为这会起作用,尽管我不确定:
I think this will work, although I'm not sure: