gpt4 book ai didi

c++ - boost::asio::async_read 文本停止条件?

转载 作者:行者123 更新时间:2023-11-28 03:51:40 25 4
gpt4 key购买 nike

我正在使用 Boost 编写一个服务器,这非常简单 - 接受 XML 消息、处理、回复。但是我在告诉它何时停止阅读时遇到了麻烦。

这就是我现在拥有的:(_index 是读取数据的缓冲区)

std::size_t tcp_connection::completion_condition(const boost::system::error_code& error, 
std::size_t bytes_transferred)
{
int ret = -1;
std::istream is(&_index);
std::string s;
is >> s;

if (s.find("</end_tag>") != std::string.npos) ret = 0;
return ret;
}


void tcp_connection::start()
{
// Get index from server
boost::asio::async_read(_socket, _index, &(tcp_connection::completion_condition),
boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}

这不会编译,因为我必须将 completion_condition 定义为静态才能将其传递给 async_read;而且我不能将 _index 定义为静态的,因为(显然)我需要它特定于该类。

是否有其他方法可以为 completion_condition 提供参数?我如何让它识别结束标记并调用读取处理程序?

最佳答案

您可以将指针传递给成员函数。使用 C++ 执行此操作的语法很棘手,但 boost::bind 隐藏了它并使其相当容易执行。

一个例子是制作completion_condition非静态并将其传递给async_read:boost::bind(&tcp_connection::completion_condition, 这个, _1, _2)

&tcp_connection::completion_condition 是指向函数的指针。 this 是类型为 tcp_connection 的对象,用于调用该函数。 _1_2 是占位符;它们将替换为调用函数时使用的两个参数。

关于c++ - boost::asio::async_read 文本停止条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com