C++ C++;boost如何将函数作为参数传递给异步操作处理程序

C++ C++;boost如何将函数作为参数传递给异步操作处理程序,c++,boost,boost-asio,C++,Boost,Boost Asio,主要目标是将我自己的函数作为参数传递给异步操作处理程序。代码如下: #ifndef TESTCLASS_HPP_ #define TESTCLASS_HPP_ #include "boost/asio.hpp" #include <boost/function.hpp> #include <boost/bind.hpp> class TestClass : public boost::asio::ip::tcp::socket{ public: TestClas

主要目标是将我自己的函数作为参数传递给异步操作处理程序。代码如下:

#ifndef TESTCLASS_HPP_
#define TESTCLASS_HPP_
#include "boost/asio.hpp"
#include <boost/function.hpp>
#include <boost/bind.hpp>

class TestClass : public boost::asio::ip::tcp::socket{
public:
    TestClass(boost::asio::io_service& ios) : boost::asio::ip::tcp::socket(ios) {
    }
    virtual ~TestClass() {};

    template <typename ConnectHandler>
    void async_connect(const endpoint_type& peer_endpoint, ConnectHandler handler) {

            boost::asio::ip::tcp::socket::async_connect(peer_endpoint,
                    boost::bind(&TestClass::handle_connect, this, boost::asio::placeholders::error, boost::bind(&TestClass::foo, this)));
    }
private:
    void handle_connect(const boost::system::error_code& err, boost::function<void (void)> func) {
        std::cout<<"handle_connect started"<<std::endl;
        func();
    }

    void foo(){
        std::cout<<"foo started" << std::endl;
    }

};

#endif /* TESTCLASS_HPP_ */
\ifndef TESTCLASS\u水电站_
#定义TESTCLASS_HPP_
#包括“增压/asio.hpp”
#包括
#包括
类TestClass:PublicBoost::asio::ip::tcp::socket{
公众:
TestClass(boost::asio::io_服务和ios):boost::asio::ip::tcp::socket(ios){
}
virtual~TestClass(){};
模板
void async\u connect(常量端点类型和对等端点,ConnectHandler){
boost::asio::ip::tcp::socket::异步\u连接(对等\u端点,
boost::bind(&TestClass::handle_connect,this,boost::asio::占位符::error,boost::bind(&TestClass::foo,this));
}
私人:
无效句柄\u连接(常量boost::系统::错误\u代码和错误,boost::函数func){
std::cout它对我有效:

但是,一般来说,使用
boost::protect
避免在嵌套绑定表达式中混淆占位符:

 #include <boost/bind/protect.hpp>



    boost::asio::ip::tcp::socket::async_connect(peer_endpoint,
            boost::bind(&TestClass::handle_connect, this,
                boost::asio::placeholders::error,
                boost::protect(boost::bind(&TestClass::foo, this))));
#包括
boost::asio::ip::tcp::socket::异步\u连接(对等\u端点,
boost::bind(&TestClass::handle_connect),这个,
boost::asio::占位符::错误,
boost::protect(boost::bind(&TestClass::foo,this));
 #include <boost/bind/protect.hpp>



    boost::asio::ip::tcp::socket::async_connect(peer_endpoint,
            boost::bind(&TestClass::handle_connect, this,
                boost::asio::placeholders::error,
                boost::protect(boost::bind(&TestClass::foo, this))));