实现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个虚函数表指针;而接口中只有虚函数表指针,不包含数据成员,
类和接口之间通过实现类进行类型转换,实现类充当了类与接口之间的桥梁。
类只有在充当接口用的时候才会引入虚函数表指针,不充当接口用的时候没有虚函数表指针,
引用自:知乎
浙公网安备 33010602011771号