【发布时间】:2020-10-14 11:28:47
【问题描述】:
我有一个结构 F 和一个函数 foo,无论 F 是不是临时的,它都有不同的实现
struct F{
void foo() & { std::cout << "F::foo() &" << std::endl; }
void foo() && { std::cout << "F::foo() &&" << std::endl; }
};
另一个结构A 有一个F 的副本,并在其函数bar 中调用F::foo。我想使用正确版本的F::foo()。因此实现是:
struct A{
void bar() & {
f.foo();
}
void bar() && {
std::move(f).foo();
}
F f;
};
我想知道我是否真的必须提供A::bar() 的两个实现。难道没有一种聪明的方法可以使用std::forward 来自动决定应该使用哪个F::foo()?
一次尝试:
struct B{
void bar() {
std::forward<F>(f).foo();
}
F f;
};
但是,这不起作用。它每次都会调用F::foo() &&。
Complete example
【问题讨论】:
标签: c++ rvalue-reference rvalue