"변형 부재는"C++ 11 9.5/8로 정의된다
노조 같은 클래스 조합 또는 직접 구성원으로 익명 조합 되어있는 클래스이다. 유니온과 같은 클래스 X에는 변형 멤버 집합이 있습니다. X가 공용체 인 경우 변형 멤버는 비 정적 데이터 멤버입니다. 그렇지 않으면, 그것의 변형 회원 즉 X.
의 회원, 노동 조합의 모든 비 정적 데이터 멤버가 "변종 회원은"있는 모든 익명 조합의 비 정적 데이터 멤버입니다, 임의의 익명화 된 공용체를 포함하는 클래스의 경우 비 정적 데이터 멤버는 클래스의 "변형 멤버"입니다.
따옴표로 묶인 컨텍스트는 12.1/5이며, 공용체와 같은 클래스에 변형되지 않은 기본 생성자가있는 변형 멤버가 있으면 클래스 자체의 기본 생성자가 삭제된다는 내용입니다. 문제는 입니다. 변형 멤버는 클래스의 기본 생성자에서 생성해야하며 솔루션에는 기본 생성자가 없어야합니다. 모든 변형 멤버가 간단한 기본 생성자를 가지면 아무런 문제가 없으므로 클래스의 기본 생성자는 모두를 구성하거나 아무 것도 생성하지 않으므로 아무런 문제가 없습니다.
boost::variant
은 별개입니다. "일부 사이트"가 "변형 멤버"라고 말하면 "이 가질 수있는 가능한 유형"즉, 해당 variant
의 "멤버"를 의미 할 때 너무 놀랍지 않을 것입니다. 그러나 이것은 C++ 11 표준에서 새로 정의 된 의미가 아닙니다.
이 사이트에 링크를 게시 할 수 있습니까? – Praetorian
스택 오버플로 자체가 그 중 하나입니다. – BlackVegetable
당신은'boost :: variant' 또는 무엇인가에 대해 이야기하고 있습니까? 전통적으로 변형은 지원되는 모든 유형이 포함 된 공용체입니다. – chris