Ich habe diesen Code:Wie Lvalue-Referenz weiterleiten?
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!
}
Da memFunc(args ...);
, was passiert, ist, dass eine Kopie von args
sortiert und nicht vec
, so dass am Ende vec
nach callFunction(...)
unsortiert sein wird.
Ich denke, dass, um dieses Problem zu lösen forward
kann mir helfen, aber wenn ich versuche: return cachedFunc(forward<Args>(args) ...);
dann etwas Schlimmes passiert (wie vector::size=0
).
Wie kann ich args
Referenz auf sort_vec
weiterleiten?
Ich * denke * du würdest nur vorwärts brauchen, wenn du 'const Args && ... args' hättest. – kfsone