如何转发左值引用?
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
向量进行排序。
我有这个代码:
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
向量进行排序。