2014-08-30 7 views
1

Я ищу способ объявить и инициализировать константу struct в моем файле заголовка класса. Класс используется приложением MFC, как вы можете видеть. Слои на моем MFC Dialog никогда не изменятся, поэтому я хотел бы постоянно их обрабатывать.Объявить и инициализировать const Struct в заголовке класса

Я ищу что-то вроде этого:

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

В-структуру:

struct LAYER_AREA{ 
    CPoint topLeft; 
    CPoint bottomRight; 
}; 

Что такое лучший способ сделать это, чтобы сохранить как можно больше производительности, насколько это возможно и легко поддерживать слои?

+0

Что вы на самом деле спрашиваете? – juanchopanza

+0

Итак, вы хотите, чтобы LAYER_AREA был const в каждом объекте или вы хотите, чтобы он был одним и тем же единственным объектом, доступным во всех объектах CLayerDialog? – Arpit

+0

Я хочу, чтобы это был один и тот же объект CLayerDialog. Что всегда остается неизменным, да – Vinzenz

ответ

1

Вы имеете в виду a 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 *. –

+0

Хорошо, так что я должен буду использовать для этого файл CPP? – Vinzenz

+1

@Future: Yup, исходный файл CPP. – Rufflewind

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)) 
{ 

} 
Смежные вопросы