C++ Wrapper类的含义是什么?

Mah*_*esh 38 c++ class wrapper

我在理解包装类时有点麻烦.如果有人可以帮助提供适当的例子,那将是很好的.

  1. 什么是C++包装类以及编写它的具体情况是什么?
  2. 有什么用途?

谢谢.

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 为此提供了一个实用程序,因为它通常用于好的习语.


Joh*_*nck 10

包装器只是一些小类,其目的是提供与它包装的东西不同的接口.例如,通常采用C API并编写一个或多个"包装"它的类来提供面向对象的接口而不是程序接口.


hAc*_*oCk 7

您询问了编写包装类的情况.例如,如果您所在的公司使用不同类型的相机,请告诉我们USB,firewire等.每个制造商都会通过API提供不同的功能集.启动相机,设置参数并从中读取图像流.

现在,在公司中构建应用程序的程序员需要与各种API中的所有特定细节隔离开来.现在,你可以做的是为每个摄像头或更智能的API编写一个包装类,只需一个具有简单功能的类,包围API提供的现有代码.

例如,我们可以设计类MyUSBCameraWrapperClass,MyFirewireCameraWrapperClass,其中包含一些成员函数,如setFrameRate(int fps),getImgFrame(*framebuffer)等.

贵公司的程序员可以使用MyUSBCameraWrapperClass usbcam; usbcam.setFrameRate(30)等你明白了吗?