调用不回调的提升函数

Call a boost function without callback

本文关键字:函数 回调 调用      更新时间:2023-10-16

>我正在使用boost-beast库进行websocket连接。您可以参考此示例以了解正在发生的事情。我使用了相同的示例,但更改了一些内容:

  • on_handshake(beast::error_code ec)分为三个功能A(beast::error_code ec)B(beast::error_code ec)C(beast::error_code ec)

  • B()发送二进制数据,A()C()发送文本。

  • A()调用B()作为回调,B()调用C()作为回调。

现在我被困在我想这样做的地步上:

void session::A(beast::error_code ec) {
    if (ec)
        return (fail(ec, "handshake"));
    ws_.async_write(net::buffer(SOMETEXT),bind(&session::B, shared_from_this(), placeholders::_1));
}
void session::B(beast::error_code ec) {
    if (ec)
        return (fail(ec, "A_FAILED"));
    if(condition1) {
        ws_.binary(true);
        ws_.async_write(net::buffer(SOMEBINARY),bind(&session::C, shared_from_this(), placeholders::_1));
    } else {
        session::on_write(ec,<WHAT SHOULD I WRITE HERE>);
    }
}
void session::C(beast::error_code ec) {
    if (ec)
        return (fail(ec, "B_FAILED"));
    ws_.binary(false);
    ws_.async_write(net::buffer(SOMETEXT),bind(&session::on_write, shared_from_this(), placeholders::_1, placeholders::_2));
}

下面是读取函数:

void
on_write(
    beast::error_code ec,
    std::size_t bytes_transferred)
{
    boost::ignore_unused(bytes_transferred);
    if(ec)
        return fail(ec, "write");
    // Read a message into our buffer
    ws_.async_read(
        buffer_,
        std::bind(
            &session::on_read,
            shared_from_this(),
            std::placeholders::_1,
            std::placeholders::_2));
}

问题:- 请检查功能B()和我的问题。任何建议或答案不胜感激。

您可以在参数中放置一个0并将其标记为未使用

例如 session::on_write(ec, 0 /* field unused */);

或者,您可以为函数签名提供默认参数:

void session::B(
    beast::error_code ec = {},
    std::size_t bytes_transferred = 0);