完美转发
如果我们有以下内容:
template <class T>
struct B{
T data;
}
struct A{
int data_array[100];
}
int main()
{
A x;
const A x_const;
auto y1 = f(A());
auto y2 = f(x);
auto y3 = f(x_const);
auto y4 = f(std::move(x));
}
我想知道一个 f
(最好是函数,但宏也可以),这样:
decltype(y1) == B<A>
decltype(y2) == B<A&>
decltype(y3) == B<const A&>
decltype(y4) == B<A&&>
也就是说,f
完美转发 x< /code> 转换为
B
的对象。
If we have the following:
template <class T>
struct B{
T data;
}
struct A{
int data_array[100];
}
int main()
{
A x;
const A x_const;
auto y1 = f(A());
auto y2 = f(x);
auto y3 = f(x_const);
auto y4 = f(std::move(x));
}
I want to know an f
(preferably function, but macro is okay also) such that:
decltype(y1) == B<A>
decltype(y2) == B<A&>
decltype(y3) == B<const A&>
decltype(y4) == B<A&&>
That is, f
perfectly forwards x
into an object of B
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是不可能的。对于 y1 和 y4,它们都采用 A 类型的右值,但您希望它们返回不同的类型。
f
应该如何知道返回什么?This is impossible. For
y1
andy4
, then they both take rvalues of type A, but you want them to return different types. How shouldf
know what to return?这几乎可以满足您的需求。唯一的区别是第一个类型的类型是
B
而不是B
。This does almost what you want. The only difference is for the first one the type is
B<A&&>
rather thanB<A>
.无法区分,因为
A()
会生成一个临时值,该临时值将绑定到A&&
。Will not be distinguishable, as
A()
produce a temporary which will bind toA&&
.