Я работаю с PCSDK от Intel, есть часть, которую я не могу синтаксически понять из примера, где конструктор абстрактного класса переопределяется. В частности, эта строка:
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;
};
Это список инициализаторов который инициализирует базовый класс и переменную-член:
GesturePipeline (void) // constructor signature
: UtilPipeline(), // initialize base class
m_render(L"Gesture Viewer") // initialize member m_render from GesturePipeline
{
EnableGesture();
}
Это список инициализатора конструктора, используемый для указания того, как инициализировать базовые подобъекты и члены данных до начала тела конструктора.
Это одно значение — инициализирует базовый подобъект, затем инициализирует m_render
член, передав строку в свой конструктор. Другой элемент данных инициализируется по умолчанию, так как он не отображается в списке.
Это список инициализаторов членов.
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}
сначала инициализирует базовый класс конструктором по умолчанию UtilPipeline
затем инициализирует m_render
с m_render(L"Gesture Viewer")
, Наконец, он входит в тело функции и выполняет EnableGesture()
,
Это список инициализации. Вы инициализируете этот элемент в классе. Краткое руководство. Запятая разделяет элементы, которые вы инициализируете. Он вызывает базовый конструктор и затем инициализирует свои собственные элементы.