boost :: asio :: co_spawn не определен в MSVC - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать TCP-сервер, используя boost.asio и следуя примерам, которые вы используете co_spawn, чтобы запустить функцию слушателя в новом потоке.

Когда я пытаюсь использовать boost::asio::co_spawn Microsoft Visual Studios сообщает, что он не определен, я включил все файлы, которые делает пример усиления .

TcpServer.h

#include <iostream>
#include <string>

#include <boost/asio/co_spawn.hpp>
#include <boost/asio/detached.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/signal_set.hpp>
#include <boost/asio/write.hpp>
#include <boost/asio/coroutine.hpp>

using namespace boost::asio;

class TcpServer
{
public:
    TcpServer(int port);
    ~TcpServer();
private:

};

TcpServer.cpp

#include "TcpServer.h"


/*
    Create a TcpServer on a given port
*/
TcpServer::TcpServer(int port)
{
    io_context ioCtx(1);

    /* E0020    identifier "co_spawn" is undefined  */
    co_spawn();
}


TcpServer::~TcpServer()
{
}

Приведенный выше код говорит мне, что co_spawn не определен, я искал другие пространства имен и проверил альтернативные функции, а их нет.Я подумал, что, возможно, это устаревшая документация, но ссылка boost.asio для версии 1.70.1 по-прежнему перечисляет co_spawn как бесплатную функцию.См. здесь

Я использую Boost: 1.70.1 Microsoft Visual Studio 2017: v15.9.7

1 Ответ

1 голос
/ 09 мая 2019

boost.asio имеет код препроцессора для определения возможностей компилятора и включения поддержки сопрограмм только в том случае, если компилятор его поддерживает.

Для MSVC, я думаю, вам нужно будет добавить флаг компилятора /await в список параметров командной строки компилятора.

ссылка: https://docs.microsoft.com/en-us/cpp/build/reference/await-enable-coroutine-support?view=vs-2019

...