一.crossdomain.h头文件的编写,如下:
#ifndef CROSSDOMAIN_H
#define CROSSDOMAIN_H
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
using namespace boost;
class CrossDomain{
private:
struct Server;
shared_ptr<Server> m_pserver;//有的读者已经看出来了,这是基于pimpl的模式的一个实现
CrossDomain(asio::io_service& io_service,const std::string& local_port);
static CrossDomain* s_instance;
public:
static void create(asio::io_service& io_service,const std::string& local_port){//工厂模式以及单例模式
s_instance = new CrossDomain(io_service,local_port);
}
static CrossDomain* instance();
void startServer();
};
#endif
说明:(1)struct Server;只是一个前向声明
(2)startServer()函数在后面的实现中,会调用struct Server里面的start_server()函数,这便是pimpl模式的关键点
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8274754
二.crossdomain.cpp源文件中关键函数的实现,如下:
1.CrossDomain构造函数的实现,如下:
CrossDomain::CrossDomain(asio::io_service& io_service,const std::string& local_port)
:m_pserver(new Server(io_service,local_port)){
}
说明:可见在CrossDomain构造函数的实现中,把Server的一个实例对象交给了智能指针m_pserver管理
2.struct Server的构造函数的实现,如下:
Server(asio