0

我有这个代码:

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将是 unsorted after callFunction(...)

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

我怎样才能转发args参考sort_vec

4

1 回答 1

1

将返回类型指定为Type&orconst Type&并返回不是临时值的内容。像这样:

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

ps你试图对const向量进行排序。

于 2016-04-26T03:54:35.720 回答