Я получаю сообщение об удаленной функции, находящейся в углублении с кодом ниже только с Visual C++. (VS 2015 обновление 2. Я также пробовал просмотр VS 15, но это то же самое)Может boost :: async использоваться с Executor с Visual C++?
Последние версии Clang и GCC в порядке с этим, но, возможно, VS является более строгим, но действительно правильным?
#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#define BOOST_THREAD_PROVIDES_EXECUTORS
#include <boost/thread/future.hpp>
class TestEx {
public:
void submit(std::function<void()>) {
}
bool try_executing_one() {
return false;
}
bool closed() {
return false;
}
void close() {
}
};
int main()
{
TestEx tex;
boost::async(
tex,
[]() {});
return 0;
}
Если вы хотели бы попробовать скомпилировать это, но не имеют доступа к Visual Studio 2015 Update 2 и увеличить вы можете сделать это онлайн здесь.
Попробуйте заменить свой 'submit' функцию с помощью' шаблона <имяТипа Закрытие> недействительным представить (Закрытие &) {} ' Похоже, принимая 'std :: function' запускает копию не подлежащего копированию типа. Я не удивлюсь, если это ошибка MSVC. Их реализация '' была, как известно, ненужной копией, но я не размотал шаблон spew достаточно, чтобы указать пальцы. –
Если вы хотите продолжить использование 'std :: function', [' boost :: executor_adaptor'] (http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html#thread .synchronization.executors.ref.executor_adaptor) завершает ваш класс (который придерживается концепции 'Executor') и выполняет преобразование в' std :: function'. http://rextester.com/edit/IZN86995 Различия между концепцией «Эксер» и «boost :: executor» обсуждаются здесь [http://www.boost.org/doc/libs/1_60_0/doc /html/thread/synchronization.html#thread.synchronization.executors.rationale.closure). –
Благодарим вас за отличное предложение. Возможно, работает функция «отправить». С нетерпением ждем, чтобы попробовать его позже в производственном коде. Было бы неплохо иметь возможность отлаживать расширение шаблона так или иначе, чтобы выяснить, что именно происходит. –