Я пытаюсь запустить функцию в потоке, используя std::packaged_task
Query query; /* protobuf object */
/* fill Query object */
std::packaged_task task([](Query& q) ->SearchResults {
index::core::Merger merger;
return merger.search(q);
});
std::future ftr = task.get_future();
std::thread(std::move(task),query).detach();
Edit2: снова обновил код, чтобы исправить ошибки. и включил полное сообщение об ошибке.
g++-4.6 (в Ubuntu 10.04) не может скомпилировать код:
In file included from /usr/include/c++/4.6/memory:80:0,
from ../src/net/QueryConnection.cpp:8:
/usr/include/c++/4.6/functional: In instantiation of ‘std::_Bind_result(Query)>’:
/usr/include/c++/4.6/thread:135:9: instantiated from ‘std::thread::thread(_Callable&&,
_Args&& ...) [with _Callable = std::packaged_task, _Args =
{Query&}]’
../src/net/QueryConnection.cpp:77:36: instantiated from here
/usr/include/c++/4.6/functional:1365:7: error: ‘std::_Bind_result<_Result,
_Functor(_Bound_args ...)>::_Bind_result(const std::_Bind_result<_Result,
_Functor(_Bound_args ...)>&) [with _Result = void, _Functor =
std::packaged_task, _Bound_args = {Query},
std::_Bind_result<_Result, _Functor(_Bound_args ...)> = std::_Bind_result(Query)>]’ declared to take const reference,
but implicit declaration would take non-const
Build error occurred, build is stopped
Я читал, что это может быть связано с ошибкой: gcc-mailinglist
Я новичок в C++ / С++ 11 - Что было бы хорошей рабочей альтернативой? Мне просто нужно запустить поток, который дает мне будущее, метод get()
которого вызывается позже в асинхронном цикле boost::asio
.