2014-09-11 3 views
0

값을 가져갈 수있는 속성 상태가있는 클래스 C가 있다고 가정 해 보겠습니다. 상태 변수를 정수로 나타내지 않고 대신 열거 형을 사용할 수 있습니다 (ofc는 기본적으로 정수입니다). 예를 들어,클래스 내의 열거 형

class C{ 
public: 
    enum state {down = -1, flat = 0, up = 1}; 
    C(state s = flat) : st(s) {} 
private: 
    state st; 
}; 

열거 형을 클래스의 public 섹션 내에 두는 이유는 다른 개체에서도이 열거 형 목록을 사용할 수 있기 때문입니다. 그들은

C::up 

으로 값을 검색해야합니다. 내 질문은 : enum 선언을 클래스 정의 내부에 배치하거나 외부에 (예 : 바로 위에) 배치하는 "모범 사례"입니까? 열거 형은 해당 클래스에 의미가있는 값/상태를 나타내면 클래스 정의 내에 배치하는 것이 직관적 인 것으로 느껴집니다.

감사합니다.

답변

0

열거 형은 의미 상 클래스 컨텍스트에서만 의미가있는 경우 내부적으로 보유하는 것은 완전히 자연스러운 일입니다. 그것이 세계적인 의미를 지닌다면, 그것은 수업 외부에 있어야합니다. 어쨌든 enum 배치는 개발중인 시스템의 의미를 반영해야합니다.

따라서 전 마지막 문장에 완전히 동의합니다.

1

자유롭게 떠 다니는 열거 형을 원치 않는 경우가 많습니다. 클래스 또는 네임 스페이스에 있어야합니다. enum이 그 특정 클래스에서 의미가있는 경우, 아마도 내부에 배치하는 것이 가장 좋은 방법 일 것입니다. SFML은 이벤트에 대한 예제가 있습니다 (sf :: Event에는 sf :: Event :: EventType 유형의 멤버가 있습니다. 이것은 sf :: Event :: KeyPressed 등의 값을 취할 수 있습니다.

+0

적어도 네임 스페이스 내에 배치하는 것은 동의합니다 (본질적으로 클래스 정의 내의 공용 섹션에 배치하여 달성하는 것입니다). 네가 말했듯이 자유로운 떠 다니는 열거 형을 피하기 위해서. – jensa

0

C++ 11을 사용하는 경우 강력한 형식의 열거 형을 사용할 수 있습니다. 이러한 형식은 다음과 같습니다

enum class state 
// ^
{ 
    Down, Flat, Up 
}; 

당신은 지금 이러한 사용에 액세스합니다 : 이것은 당신이/using 항상 좋습니다 요소를, 자격을 필요로

state::Down 
state::Flat 
state::Up 

하는 것으로. 그러나이 열거 형은 유형 안전이 아니므로 임의로 정수로 사용할 수 없습니다 (어쨌든이 작업을해서는 안됨).

+0

아, 그건 사실 아주 좋습니다. – jensa