对网络异步接收数据使用回调时,代码可读性差 我用自己的网络库开发C++协议的客户端协议。 我创建了从服务器异步接收数据的方法。 它的方法在收到数据时得到回调调用。 但我需要调用嵌套在此回调中的异步读取数据

对网络异步接收数据使用回调时,代码可读性差 我用自己的网络库开发C++协议的客户端协议。 我创建了从服务器异步接收数据的方法。 它的方法在收到数据时得到回调调用。 但我需要调用嵌套在此回调中的异步读取数据,c++,network-programming,C++,Network Programming,例如: this->Send(some_data1, some_data_length1); this->AsyncReceive([some_data2, some_data_length2]() { this->Send(some_data3, some_data_length3); this->AsyncReceive([some_data4, some_data_length4]() { this->Send(some_d

例如:

this->Send(some_data1, some_data_length1);

this->AsyncReceive([some_data2, some_data_length2]() {
    this->Send(some_data3, some_data_length3);

    this->AsyncReceive([some_data4, some_data_length4]() {
        this->Send(some_data5, some_data_length5);

        this->AsyncReceive([some_data6, some_data_length6]() {
            this->Send(some_data7, some_data_length7);

            this->AsyncReceive([some_data8, some_data_length8]() {
                this->Send(some_data9, some_data_length9);
                
                // and more..
            });
        });
    });
});

也许有人知道我如何解决这个问题?

< P>首先,因为这是标记C++,使API函数接受范围宽的数据范围,而不是指针+长度的旧C IDOM。 使用户代码可以如下所示:

std::vector v;
std::数组a;
std::字符串str;
std::span s;
// ...
您的_api.Send(v);
你的api发送(a);
你的api.Send(str);
您的_api.Send;
这将大大提高可用性。然后,向API中添加一个函数,以便用户代码如下所示:

您的_api.Send(数据);
您的\u api.AsyncReceiveAndSend([](自动入站){
// ...
退场;
}).AsyncReceiveAndSend([](自动入站){
// ...
退场;
}).AsyncReceive([](自动入站){
// ...
})

规则是将代码简单地拆分为更小的函数/方法。我个人的规则是,lambda总是一行程序调用更复杂的函数/方法。