不知道
std::forward
这里有没有意义
template <class T>
void juju(T && x) {
std::forward<T>(x).jaja();
}
我猜它没有意义,因为
this
在方法调用中总是一个指针,所以它是由右值或左值引用组成的没有区别。但请确认我的直觉或解释为什么我错了
上面的例子是这个代码的一个简化的方法,
juju
是for_each
,T
是ExecutionPolicy
和jaja
是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);
}
输出:
&&
hello