如何转发左值引用?

How to forward lvalue reference?

我有这个代码:

struct MultiMemoizator {
    template <typename ReturnType, typename... Args>
    ReturnType callFunction(std::function<ReturnType(Args...)> memFunc, const Args&... args) {
         return memFunc(args ...);
    }
};

int main()
{
    typedef vector<double> vecD;
    //filling vecD with random numbers...
    MultiMemoizator mem;
    function<vecD(vecD)> sort_vec = [](vecD &vec) {
        sort(vec.begin(),vec.end());
        return vec;
    };
    mem.callFunction<vecD,vecD>(sort_vec,vec);
    //vec is still not sorted!
}

由于 memFunc(args ...); 发生的是 args 的副本排序而不是 vec,所以最后 vec 将在 [=15= 之后未排序].

我认为为了解决这个问题 forward 可以帮助我,但是如果我尝试:return cachedFunc(forward<Args>(args) ...); 那么不好的事情就会发生(比如 vector::size=0)。

如何将 args 引用转发给 sort_vec

指定 return 类型为 Type&const Type& 和 return 不是临时值的内容。 像这样:

function<vecD&(vecD&)> sort_vec = [](vecD &vec) -> vecD& {
    std::sort(vec.begin(),vec.end());
    return vec;
};

p.s。您正在尝试对 const 向量进行排序。