2014-08-30 50 views
1

我正在尋找方法來聲明和初始化我的類頭文件中的常量結構。如您所見,該類正在被MFC應用程序使用。 我的MFC對話框上的圖層永遠不會改變,所以我想不斷地對它們進行修改。在類頭中聲明和初始化const結構

我期待這樣的事情:

class CLayerDialog : CDialogEx 
{ 
... 
public: 
    const LAYER_AREA(CPoint(0, 70), CPoint(280, 140)); 
} 

的結構:

struct LAYER_AREA{ 
    CPoint topLeft; 
    CPoint bottomRight; 
}; 

什麼是做到這一點的最佳方式,以儘可能多的性能,從而爲儘可能和輕鬆維護層?

+0

你究竟在問什麼? – juanchopanza 2014-08-30 22:04:55

+0

所以你想讓LAYER_AREA在每個對象中都是const的,或者你想讓它成爲CLayerDialog所有對象中可用的單一對象? – Arpit 2014-08-30 22:09:06

+0

我希望它是CLayerDialog的同一個對象。它始終保持不變,是的 – Vinzenz 2014-08-31 11:04:29

回答

1

你的意思是一個static const的成員變量?

// header file 
class CLayerDialog : CDialogEx 
{ 
/* ... */ 
public: 
    static const LAYER_AREA myvar; 
}; 

// source file 
const LAYER_AREA CLayerDialog::myvar(CPoint(0, 70), CPoint(280, 140)); 

注意,變量必須定義外的線(在源文件,而不是頭文件)。您還需要爲struct LAYER_AREA提供適當的構造函數。

+1

在C++ 03中這是真的,並且可能仍然是Visual C++的最佳方法,但下一個版本應該對* brace-or-equal-initializer *語法有更好的支持。 – 2014-08-30 23:37:22

+0

好的,那麼我將不得不爲此使用CPP文件? – Vinzenz 2014-08-31 02:32:38

+1

@未來:是的,CPP「源文件」。 – Rufflewind 2014-08-31 04:28:55

1

你可以做這樣的事情:(我已經做了幾個假設你沒有提供的類)的頭文件

class CDialogEx 
{ 
    public: 
     CDialogEx(){} 
}; 

class CPoint 
{ 
    public: 
     CPoint (const int& _x, const int& _y):x(_x), y(_y){} 

    private: 
     int x; 
     int y; 

}; 

struct LAYER_AREA 
{ 
    CPoint topLeft; 
    CPoint bottomRight; 
    LAYER_AREA (CPoint tl, CPoint br): 
     topLeft (tl), bottomRight (br) 
    { 
    } 
}; 

class CLayerDialog : CDialogEx 
{ 
    public: 
     CLayerDialog(); 
     const LAYER_AREA myStructVar; 
}; 

在.cpp文件

CLayerDialog::CLayerDialog() 
    : myStructVar (CPoint(0, 70), CPoint(280, 140)) 
{ 

}