我有这个代码:
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
?