是否有使用 std::forward,其中参数不是变量名?

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

在大多数情况下,std::forward参数的

type
是转发引用:

template <class T>
void CallF(T&& value) {
    F(std::forward<T>(value));
}

在极少数情况下,type不是转发参考(

FWD
取自P0644):

#define FWD(x)  std::forward<decltype(x)>(x)

template <class T>
struct Wrapper {
    void operator()(T x1, T& x2, T&& x3) const {
        f(FWD(x1), FWD(x2), FWD(x3));
    }

    void (*f)(T, T&, T&&);
};

但是,在这两种情况下,参数本身都是变量的名称(

value
x1
x2
x3
)。是否存在不是变量名而是其他表达式的情况?

c++ language-lawyer perfect-forwarding
1个回答
0
投票

查看 https://en.cppreference.com/w/cpp/utility/forward——特别是“转换包装器”。

我还没有使用过类似的东西(还没有?)——但很多相关的东西对我来说仍然是黑带类别。

© www.soinside.com 2019 - 2024. All rights reserved.