从类外调用Boost方法

从类外调用Boost方法,boost,boost-asio,tcpclient,Boost,Boost Asio,Tcpclient,让我们看看我能问一个多么简单的问题。我有: void TCPClient::test(const boost::system::error_code& ErrorCode) { // Anything can be here } 我想从另一节课上讲。我有一个全局boost::thread\u组,它创建了一个线程 clientThreadGroup->create_thread(boost::bind(&TCPClient::test,client, /* this

让我们看看我能问一个多么简单的问题。我有:

void TCPClient::test(const boost::system::error_code& ErrorCode)
{
    // Anything can be here
}
我想从另一节课上讲。我有一个全局boost::thread\u组,它创建了一个线程

clientThreadGroup->create_thread(boost::bind(&TCPClient::test,client, /* this is where I need help */));
但我不确定如何调用test,如果这是正确的方法

作为对整个项目的解释,我正在客户端和服务器之间创建一个tcp连接,并有一个方法“send”(在另一个类中),当需要发送数据时将调用该方法。我当前的目标是能够调用test(它当前包含async_send)并通过调用时已经设置好的套接字发送信息。然而,我对如何实施的其他想法持开放态度,如果这证明太困难,我可能会致力于创建消费者/生产者模型

我可以在这个项目中使用这两种方法,但是我以后必须实现listen-to,以便能够在以后从服务器接收控制数据包,因此如果对使用哪种方法有任何建议,我将不胜感激

boost::system::error_code err;
clientThreadGroup->create_thread(boost::bind(&TCPClient::test,client, err));

这对我有用。我不知道如果出了问题,它是否真的会出错,所以如果有人想纠正我,我会非常感激(如果只是为了体验)。

client
需要一个类型为
error\u code
的参数,所以你必须将它传递给
bind
bind(&TCPClient::test,client,some\u error)。这是一个有助于理解
bind
@IgorR的示例。我遇到的问题是错误代码。如果有关于它们以及如何在这种情况下使用它们的指南,我将不胜感激,因为我一直找不到任何东西(可能是因为我不知道我在找什么)。@TannerSansbury:谢谢你,这有助于更好地解释bind,因为我所拥有的只是通过使用它和改变我所看到的东西而得到的东西。@IgorR。好吧,在照字面意思理解了你所说的之后,我刚刚声明了'boost::system::error\u code some\u error;'就在调用test之前,它就工作了。感谢向正确的方向推进。
test
函数如何处理其
error\u code
参数?如果您传递默认构造的
error\u code
,则表示“无错误”(
err==false
)。为此,我假设从其他对象调用时(例如'm_Socket.async_receive(boost::asio::buffer(m_receivebuffer,m_BufLen),boost::bind(&TCPClient::OnReceive,this,boost::asio::placeholder s::error));)如果代码的“async_receive”部分出现问题,它将在中输入一个错误,因此当它到达“OnReceive”时,它将使用一个错误代码。这个假设可能是错误的,它可能只是一个“占位符”,但我假设它在出现错误时被替换。
placeholders::error
_1
的别名,并指定绑定器的第一个参数,即
bind(&func,asio::placeholders::error)
创建一个接受1个参数的函子。当
async\u receive
完成时,调用functor的调用方(即asio完成处理程序调度器)传递此参数。这比我找到的任何其他方法都更好地解释了这一点。谢谢你的帮助,我相信我很快就会回来问另一个问题。