2

我與英特爾的PCSDK工作,還有我不語法從那裏抽象類的構造函數被覆蓋的樣本理解的一部分。具體而言,該行:c + +重寫語法

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; 
}; 

回答

1

這是一個initializer list它初始化基類和一個成員變量:

GesturePipeline (void) // constructor signature 
    : UtilPipeline(), // initialize base class 
    m_render(L"Gesture Viewer") // initialize member m_render from GesturePipeline 
{ 
    EnableGesture(); 
} 
+0

爲什麼'm_render'需要這樣的方法來初始化? – Mike

+1

@Mike爲什麼必須在初始化列表中初始化某些東西有幾個原因:1)因爲它是引用2)因爲它不能被默認初始化3)因爲成員變量被聲明爲「const」。在你的情況下,我認爲它可能是2)。當然,它可能只是被使用,因爲它更高效,並且它被許多人認爲是可取的,即使默認構建和稍後的任務也是可能的。 –

1

這就是構造器的初始化器列表,用來指定如何初始化基子對象和數據成員在構造函數體開始之前。

這一個值,初始化的基子對象,然後通過使串給它的構造初始化的m_render構件。另一個數據成員是默認初始化的,因爲它沒有出現在列表中。

1

這是一個member initializer list.

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

首先初始化它的基類的默認構造函數UtilPipeline然後初始化m_renderm_render(L"Gesture Viewer")。最後進入功能體並執行EnableGesture()

1

這是一個初始化列表。您正在初始化該類中的該元素。 Quick tutorial。逗號分隔您正在初始化的元素。它調用基礎構造函數,然後初始化它自己的元素。