Mah*_*esh 38 c++ class wrapper
我在理解包装类时有点麻烦.如果有人可以帮助提供适当的例子,那将是很好的.
谢谢.
GMa*_*ckG 31
"包装类"是一个事实上的术语,意思是"包裹"资源的类; 即,管理资源.当人们写一个包装器时,他们正在做这样的事情:
class int_ptr_wrapper
{
public:
int_ptr_wrapper(int value = 0) :
mInt(new int(value))
{}
// note! needs copy-constructor and copy-assignment operator!
~int_ptr_wrapper()
{
delete mInt;
}
private:
int* mInt;
};
Run Code Online (Sandbox Code Playgroud)
该类管理("包装")指向的指针int.所有资源都应该以某种方式包装,以保持清洁(没有明确的清理代码或噪音)和正确性(析构函数保证运行;不能忘记清理,并且安全例外).
这种模式称为范围绑定资源管理(SBRM),但更常见(但最神秘)的名称是资源获取是初始化(RAII).我们的想法是将资源的清理绑定到析构函数,原因如上所示:范围处理其余部分.
请注意,我说它缺少复制构造函数和复制赋值运算符.这是由于三法则.(有关详细说明,请参阅链接的问题.)正确实现此规则的最简单方法是使用复制和交换习惯用法,在此处进行说明.
有时,为资源清理编写包装类并不务实,通常在资源是唯一的或使用一次时.(或者使用事务性编程.)对此的解决方案称为范围保护,一种在需要它的函数内编写清理代码的方法.
您可以在自己喜欢的搜索提供商(即Google)中搜索更多信息,或者在此处转到"主要"文档.请注意,Boost 为此提供了一个实用程序,因为它通常用于好的习语.
您询问了编写包装类的情况.例如,如果您所在的公司使用不同类型的相机,请告诉我们USB,firewire等.每个制造商都会通过API提供不同的功能集.启动相机,设置参数并从中读取图像流.
现在,在公司中构建应用程序的程序员需要与各种API中的所有特定细节隔离开来.现在,你可以做的是为每个摄像头或更智能的API编写一个包装类,只需一个具有简单功能的类,包围API提供的现有代码.
例如,我们可以设计类MyUSBCameraWrapperClass,MyFirewireCameraWrapperClass,其中包含一些成员函数,如setFrameRate(int fps),getImgFrame(*framebuffer)等.
贵公司的程序员可以使用MyUSBCameraWrapperClass usbcam; usbcam.setFrameRate(30)等你明白了吗?
| 归档时间: |
|
| 查看次数: |
74193 次 |
| 最近记录: |