구조체 (객체의 순서가 아님)를 나타내는 멤버가있는 구조체를 만들 수 있기를 원합니다. 런타임 오버 헤드가 없어야하며 컴파일 타임에 서수를 사용할 수 있어야합니다.각 구조체에 고유 한 서수가 있음 보장
어떤 이유로 정적 변수는 컴파일 시간에 작동하지 않기 때문에 가장 단순한 방법은 작동하지 않습니다 다음 구조체가 생성되는 방법
int nextOrdinal() {
static int ordinal;
return ordinal++;
}
struct S1 {
enum ordinal = nextOrdinal();
}
struct S2 {
enum ordinal = nextOrdinal();
}
이 순간에 나에게 중요하지 않습니다. 문제는 컴파일 타임에 상태를 유지하는 것이 불가능한 것 같습니다. 맞습니까?
--Inspired by Boost.units dimensional analysis.
사실 저는 컴파일러에 상태를 저장하는 방법이 없다고 생각하지만 실제로 컴파일 할 때 고유 한 서수를 구조체에 할당하는 방법이 있습니다. 나는 곧 나의 해결책을 게시 할 것이다. – Arlen
프로그래머가 그 (것)들을 공급하는 경우에, 확실하십시오. 그리고 어쨌든 컴파일러가 유일성을 검사하는 것이 가능해야합니다 (예 : 동일한 이름의 동일한 모듈에있는 두 개의 구조체). –
맞지만 struct와 함께 할 수는 없습니다. 왜냐하면 같은 이름을 가진 로컬 및 글로벌 구조체를 가질 수 있기 때문에 컴파일 타임 오류가 발생하지 않기 때문입니다. – Arlen