У меня есть этот код:Как переслать ссылку на lvalue?
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
будет несортированный после callFunction(...)
.
Я думаю, что для решения этой проблемы forward
может мне помочь, но если я попробую: return cachedFunc(forward<Args>(args) ...);
, тогда произойдет что-то плохое (например, vector::size=0
).
Как я могу направить args
ссылку на sort_vec
?
I * think * вам понадобится только переслать, если у вас есть 'const Args && ... args'. – kfsone