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://blog.csdn.net/liukang325/article/details/79172336

猜你喜欢

转载自blog.csdn.net/CoderAldrich/article/details/80816207