C++ 类Pimpl手法

在大佬的代码中看到经常使用这种结构,于是研究了一下,最开始没太看懂用意,后来将它与pimpl手法相对比,就大致理解了。

这种手法,我称为类pimpl手法,它通过写一个含有纯虚函数的C类,B类包含C类成员,同时A类继承C类,重写纯虚函数。这样在B类中调用C类成员函数时,最终调用的是A类的成员函数。

代码示例:

class C {
public:
	virtual void funcA() = 0;
	virtual void funcB() = 0;
};

class Base : public C {
public:
	void func()
	{
		std::cout << "func" << std::endl;
	}
	virtual void funcA()
	{
		std::cout << "funcA" << std::endl;
	}
	virtual void funcB()
	{
		std::cout << "funcB" << std::endl;
	}
};

class ClassA {
public:
	ClassA() : cbA(nullptr) {}

	void testA()
	{
		std::cout << "ClassA TestA\t";
		cbA->funcA();
	}
	void testB()
	{
		std::cout << "ClassA TestB\t";
		cbA->funcB();
	}
	void setC(C* cb) { cbA = cb;}

private:
	C* cbA;
};

int main()
{
	Base *b = new Base();
	b->func();
	b->funcA();
	ClassA *d = new ClassA();
	d->setC(b);

	d->testA();
	d->testB();

	return 0;
}

个人认为好处是,与pimpl一致,提高了封装性,减少了A类的接口暴露,也提高了编译速度。

与pimpl差异:
pimpl是封装了数据成员,而类pimpl手法则是封装了成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值