实现0开销的 c++ 接口例子

// network.h
class Network
{
public:
    bool send(const char* host, 
              uint16_t port, 
              const std::string& message);
    static Network* New();
    static void Delete(Network* network);

protected:
    Network();
    ~Network();
}

// network.cpp
bool Network::send(const char* host, 
                   uint16_t port, 
                   const std::string& message)
{
    NetworkImpl* impl = (NetworkImpl*)this;
    //通过impl访问成员变量,实现Network
}
static Network* New()
{
    return new NetworkImpl();
}

static void Delete(Network* network)
{
    delete (NetworkImpl*)network;
}


// networkimpl.h
class NetworkImpl : public Network
{
    friend class Network;

private:
    //Network类的成员变量
}

  

    要点:(类是指实现类)

    类中的数据只有成员变量,不包含虚函数表指针,类不会因为实现了N个接口而引入N个虚函数表指针;而接口中只有虚函数表指针,不包含数据成员,

    类和接口之间通过实现类进行类型转换,实现类充当了类与接口之间的桥梁。

   

     类只有在充当接口用的时候才会引入虚函数表指针,不充当接口用的时候没有虚函数表指针,

 

引用自:知乎

posted on 2022-08-14 10:49  金凯旋  阅读(64)  评论(0)    收藏  举报

导航