enum을 정의합니다. struct {enum Type {};
5022 단어 struct
-- Piaoger
>>enum을 정의하는 몇 가지 방법
사실 이 몇 가지 형식의 주요 차이점은 다음과 같다.
enum의 정의를 끼워 넣은 enum Type에 넣을지 여부;
enum Type이 struct에 중첩되어 있는지 아니면 namespace 안에 중첩되어 있는지 여부
1. 네스트되지 않음
enum DateTimeKind
{
kUnspecified = 0,
kLocalTime = 1,
kUtcTime = 2
};
inline bool isUtc(DateTimeKind kind)
{
return kind == kUtcTime;
}
2.namespace 내에 enum Type 중첩
namespace DateTimeKind
{
enum Type
{
kUnspecified = 0,
kLocalTime = 1,
kUtcTime = 2
};
}
inline bool isUtc(DateTimeKind::Type kind)
{
return kind == DateTimeKind::kUtcTime;
}
3. enum Type은 struct에 중첩
struct DateTimeKind
{
enum Type
{
kUnspecified = 0,
kLocalTime = 1,
kUtcTime = 2
};
}
inline bool isUtc(DateTimeKind::Type kind)
{
return kind == DateTimeKind::kUtcTime;
}
4. 클래스의 enum Type이 struct에 중첩됨
클래스에 namespace가 있을 수 없기 때문에 enum Type은 struct에만 넣을 수 있습니다
class DateTime
{
public:
struct Kind
{
enum Type
{
kUnspecified = 0,
kLocalTime = 1,
kUtcTime = 2
};
};
private:
// Data Members
};
inline bool isUtc(DateTime::Kind::Type kind)
{
return kind == DateTime::Kind::kUtcTime;
}
5. 클래스 중첩 없음enum
class DateTime
{
public:
enum Kind
{
kUnspecified = 0,
kLocalTime = 1,
kUtcTime = 2
};
};
inline bool isUtc(DateTime::Kind kind)
{
return kind == DateTime::kUtcTime;
}
>> 중첩 Or 중첩 안함?
상대적으로 Piaoger는 끼워 넣는 형식을 좋아해서 이름 충돌의 기회를 줄이고 읽을 수 있다.
가독성으로 말하자면DateTime::Kind::kUtcTime은DateTime::kUtcTime보다 틀림없이 클 것이다. 우리는 kUtcTime가Time이TimeKind라는 것을 잘 알 수 있다.
이름 충돌을 줄일 때 한 종류 중 여러 개의 enum에 kUnknown을 추가하고 싶을 때 문제를 발견할 수 있습니다. 보통 아래에 접미사를 붙여서 차이점을 표시할 수 밖에 없습니다.
class ClassName
{
public:
enum EnumXX
{
kUnknownXX = 0,
kValue1XX = 1,
kValue2XX = 2
};
enum EnumYY
{
kUnknownYY = 0,
kValue1YY = 1,
kValue2YY = 2
};
};
>> struct Or namespace
namespace의 약점은 계승할 수 없고,class와struct에 사용할 수 없다는 것이다.struct 형식은 일부 어리석은 컴파일러가 struct에서 기본 구조 함수와 같은 코드를 몰래 생성할 수도 있다.
이런 멍청한 컴파일러가 드물고namespace의 형식이 통일되기 어렵다는 것을 감안하여 Piaoger는 결국 struct {enum Type {};이런 형식, 즉 위에서 언급한 세 번째와 네 번째 형식.
● 자주 사용하는 enum을class 이외에 정의하기
이렇게 하면 필요없는include도 피할 수 있다.
Qt는 qnamespace에 있습니다.h에서 대량의 상용enum을 정의했다.(...\src\corelib\global\qnamespace.h)
나는 모든 모듈에 XXXTypes를 추가하는 것을 비교적 좋아한다.h, 관련 enum 정의와class 전방향 성명과 모두 이 파일에 넣으세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 구조체 클래스은 접근자 메서드가 있는 속성 모음입니다. 클래스를 명시적으로 작성할 필요 없이. Struct 클래스는 구성원 및 해당 값 집합을 포함하는 새 하위 클래스를 생성합니다. 각 멤버에 대해 #attr_accessor 와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.