【发布时间】:2026-01-09 10:05:01
【问题描述】:
我有以下类,它存储了对函数的完美转发引用:
template <class F>
class Visitor
{
public:
Visitor(F &&f) : _f(std::forward<F>(f))
{
}
xt::LOOP_CONTROL OnElem(xvi::Elem &elem)
{
return _f(elem);
// or should it be:
// return std::forward<F>(_f)(elem);
}
private:
F &&_f;
};
想知道拨打_f(elem) 或std::forward<F>(_f)(elem); 是否会有所不同?
【问题讨论】:
-
通常你会转发参数,而不是函数本身。
-
尽管技术上可以通过引用
operator()来处理左值或右值,但我认为它在实践中的表现并不多。_f(elem)被破坏的可能性很小。
标签: c++ forwarding perfect