是否有在方法调用中调用 std::forward 的感觉(与参数相反)?

问题描述 投票:0回答:1

不知道

std::forward
这里有没有意义

template <class T>
void juju(T && x) {
  std::forward<T>(x).jaja();
}

我猜它没有意义,因为

this
在方法调用中总是一个指针,所以它是由右值或左值引用组成的没有区别。但请确认我的直觉或解释为什么我错了

上面的例子是这个代码的一个简化的方法,

juju
for_each
T
ExecutionPolicy
jaja
get_devices

c++ perfect-forwarding
1个回答
3
投票

当你在方法内部考虑

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
© www.soinside.com 2019 - 2024. All rights reserved.