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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章