Есть аналогичный вопрос, который я написал о переходе на лямбды.C ++ 0x не имеет синтаксиса захвата хода.Единственное решение, которое я мог придумать, это какой-то объект прокси-функции.
template<typename T, typename F> class move_capture_proxy {
T t;
F f;
public:
move_capture_proxy(T&& a, F&& b)
: t(std::move(a)), f(std::move(b)) {}
auto operator()() -> decltype(f(std::move(b)) {
return f(std::move(b));
}
};
template<typename T, typename F> move_capture_proxy<T, F> make_move_proxy(T&& t, F&& f) {
return move_capture_proxy<T, F>(std::move(t), std::move(f));
}
execution_queue.try_push(make_move_proxy(std::move(task), [](decltype(task)&& ref) {
auto task = std::move(ref);
// use task
});
Обратите внимание, что я на самом деле не пробовал этот код, и он стал бы намного лучше с шаблонами с переменным числом аргументов, но MSVC10У меня их нет, поэтому я не знаю о них.