2

我正在使用英特尔的 PCSDK,从一个示例中我无法从语法上理解其中抽象类的构造函数被覆盖的部分。具体来说,这一行:

GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}

UtilPipeline() 和 m_render 之间的逗号是什么意思?这是上下文的完整代码:

#include "util_pipeline.h"
#include "gesture_render.h"
#include "pxcgesture.h"
class GesturePipeline: public UtilPipeline {
public:
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {
if (data->active) m_gdata = (*data);
}
virtual void PXCAPI OnAlert(PXCGesture::Alert *data) {
switch (data->label) {
case PXCGesture::Alert::LABEL_FOV_TOP:
wprintf_s(L"******** Alert: Hand touches the TOP boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_BOTTOM:
wprintf_s(L"******** Alert: Hand touches the BOTTOM boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_LEFT:
wprintf_s(L"******** Alert: Hand touches the LEFT boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_RIGHT:
wprintf_s(L"******** Alert: Hand touches the RIGHT boundary!\n");
break;
}
}
virtual bool OnNewFrame(void) {
return m_render.RenderFrame(QueryImage(PXCImage::IMAGE_TYPE_DEPTH),
QueryGesture(), &m_gdata);
}
protected:
GestureRender m_render;
PXCGesture::Gesture m_gdata;
};
4

5 回答 5

1

它是一个初始化器列表,用于初始化基类和成员变量:

GesturePipeline (void) // constructor signature
  : UtilPipeline(), // initialize base class
    m_render(L"Gesture Viewer") // initialize member m_render from GesturePipeline
{
    EnableGesture();
}
于 2013-10-30T20:47:28.723 回答
1

它是成员初始化列表

于 2013-10-30T20:47:56.720 回答
1

那是构造函数的初始化列表,用于指定如何在构造函数体开始之前初始化基础子对象和数据成员。

这个值初始化基本子对象,然后m_render通过将字符串传递给其构造函数来初始化成员。另一个数据成员是默认初始化的,因为它没有出现在列表中。

于 2013-10-30T20:48:25.897 回答
1

这是一个成员初始化列表。

GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}

首先用它的默认构造函数初始化基类,UtilPipeline然后m_renderm_render(L"Gesture Viewer"). 最后进入函数体并执行EnableGesture()

于 2013-10-30T20:49:40.457 回答
1

这是一个初始化列表。您正在初始化该类中的元素。快速教程。逗号分隔您正在初始化的元素。它正在调用基本构造函数,然后初始化它自己的元素。

于 2013-10-30T20:49:57.590 回答