在大多数情况下,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
)。是否存在不是变量名而是其他表达式的情况?
查看 https://en.cppreference.com/w/cpp/utility/forward——特别是“转换包装器”。
我还没有使用过类似的东西(还没有?)——但很多相关的东西对我来说仍然是黑带类别。