【转载】c++私有类创建

在类的头文件中不暴露私有变量,目的一般有两个: 
1. 提供给别人的dll对应的头文件中,不希望在头文件中暴露私有变量的名称; 
2. 因为私有变量的类型需要包含另一个头文件,所以不希望在头文件中包含其它头文件;
一般可以用下面的方法来隐藏私有变量。
 
  在头文件中封装接口:
 
TWebSocketServer.h
 
class  TWebSocketServer
{
public:
    TWebSocketServer();
    ~TWebSocketServer();
 
    void runServer(int port);
    void stopServer();
 
private:
    class TWebSocketServerImpl;
    TWebSocketServerImpl *ptr;
};

TWebSocketServer.cpp  

#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>

class TWebSocketServer::TWebSocketServerImpl
{
public:

TWebSocketServerImpl(){}

~TWebSocketServerImpl()
{
stopServer();
}

void runServer(int port)
{
// Set logging settings
echo_server.set_access_channels(websocketpp::log::alevel::all);
echo_server.clear_access_channels(websocketpp::log::alevel::frame_payload);

// Initialize Asio
echo_server.init_asio();

// Register our message handler
echo_server.set_message_handler(bind(&on_message, this, ::_1, ::_2));

// Listen on port 9002
echo_server.listen(port);

// Start the server accept loop
echo_server.start_accept();

// Start the ASIO io_service run loop
echo_server.run();
}

void stopServer()
{
echo_server.stop_listening();
}
private:
// Create a server endpoint
//在 #include <websocketpp/server.hpp> 不暴露在头文件中
server echo_server;
}

///////////////////////////////
TWebSocketServer::TWebSocketServer()
{
ptr = new TWebSocketServerImpl;
}

TWebSocketServer::~TWebSocketServer()
{
if(ptr)
{
delete ptr;
}
}

void TWebSocketServer::runServer(int port)
{
ptr->runServer(port);
}

void TWebSocketServer::stopServer()
{
ptr->stopServer();
}
原文地址:https://www.cnblogs.com/sshbit/p/13223856.html