2016-05-05 2 views
0

Я получаю сообщение об удаленной функции, находящейся в углублении с кодом ниже только с 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 и увеличить вы можете сделать это онлайн здесь.

http://rextester.com/BAX37541

+1

Попробуйте заменить свой 'submit' функцию с помощью' шаблона <имяТипа Закрытие> недействительным представить (Закрытие &) {} ' Похоже, принимая 'std :: function' запускает копию не подлежащего копированию типа. Я не удивлюсь, если это ошибка MSVC. Их реализация '' была, как известно, ненужной копией, но я не размотал шаблон spew достаточно, чтобы указать пальцы. –

+1

Если вы хотите продолжить использование '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). –

+0

Благодарим вас за отличное предложение. Возможно, работает функция «отправить». С нетерпением ждем, чтобы попробовать его позже в производственном коде. Было бы неплохо иметь возможность отлаживать расширение шаблона так или иначе, чтобы выяснить, что именно происходит. –

ответ

1

Как Шон Клайн отметил, ответ заключается в использовании boost::executor_adaptor

Смежные вопросы