【发布时间】:2016-04-26 03:16:50
【问题描述】:
我有这个代码:
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?
【问题讨论】:
-
我认为如果你有
const Args&&... args,你只需要转发。
标签: c++11 pass-by-reference perfect-forwarding forwarding-reference