Łuk*_*zyk 2 c++ perfect-forwarding
我想知道std::forward这里是否有感觉。
template <class T>
void juju(T && x) {
std::forward<T>(x).jaja();
}
Run Code Online (Sandbox Code Playgroud)
我想它没有任何意义,因为它this始终是方法调用中的指针,因此如果它是由右值或左值引用组成的,则没有区别。但请确认我的直觉或解释我为什么错了。
上面的示例是此代码的简化方法,包含jujubeing for_each、TbeingExecutionPolicy和jajabeing get_devices。
this当您考虑方法内部时,您走得太快了。在调用成员方法之前,需要进行重载决策。左值和右值引用可以有不同的重载:
#include <utility>
#include <iostream>
template <class T>
void juju(T && x) {
std::forward<T>(x).jaja();
}
struct foo {
void jaja() & { std::cout << "hello\n";}
//^
void jaja() && { std::cout << "&&\n";}
//^^
};
int main(){
juju(foo{});
foo f;
juju(f);
}
Run Code Online (Sandbox Code Playgroud)
输出:
&&
hello
Run Code Online (Sandbox Code Playgroud)