2011-12-10 3 views
1

사용자 정의 유형에 switch을 사용하려고합니다. 이 표준은스위치의 클래스 유형 사용

조건은 정수형, 또는 통합 또는 열거 형 단일이 아닌 명시 적 변환 함수가 존재하는 대한 클래스 형 (12.3)의 열거 형이어야한다 말한다. 조건이 클래스 유형 인 경우 변환은 함수를 호출하여 변환되며이 섹션의 나머지 부분에 대해서는 원래 조건 대신 변환 결과가 사용됩니다. 통합 프로모션이 수행됩니다.

이것은 enum 입력 한 암시 변환 기능을 갖는 타입 유효 switch 표현되어야한다고 제안한다. 그러나이 문구를 사용하려고 할 때 Visual Studio는 스위치식이 정수가 아닌 것에 대한 오류를 제공합니다. VS가이 영역에서 비준수입니까?

클래스 타입의 정의가 beginvector<Token>::iterator 인 erroring 선으로서 switch(*begin)

struct Token { 
     Token() 
      : line(0) 
      , columnbegin(0) 
      , columnend(0) {} 
     Token(const Codepoint& cp) { 
      *this = cp; 
     } 
     template<typename Iterator> Token(Iterator begin, Iterator end) { 
      columnend = 0; 
      columnbegin = 0; 
      line = 0; 
      while(begin != end) { 
       *this += *begin; 
       begin++; 
      } 
     } 
     operator TokenType() { 
      return type; 
     } 
     Token& operator+=(const Codepoint& cp) { 
      if (cp.column >= columnend) 
       columnend = cp.column; 
      if (columnbegin == 0) 
       columnbegin = cp.column; 
      Codepoints += cp.character; 
      if (line == 0) 
       line = cp.line; 
      return *this; 
     } 
     Token& operator=(const Codepoint& cp) { 
      line = cp.line; 
      columnbegin = cp.column; 
      columnend = cp.column; 
      Codepoints = cp.character; 
      return *this; 
     } 

     int line; 
     int columnbegin; 
     int columnend; 
     TokenType type; 
     string Codepoints; 
    }; 

이다.

편집 :

질문을 읽으십시오. 내 코드를보고 싶니? 어쩌면 내가 위의 줄에 정확히 말한 것인데, 어쩌면 은 어떨까요? 어쩌면 나는 크기와 굵은 기울임 꼴로 50 글자 씩 넣어야한다.

std::vector<Token>::iterator begin = vector.begin(); 
switch(*begin) { 
case TokenType::stuff: 
} 
+0

재미있게 ... 의사 코드를 게시 할 수 있습니까? –

+0

@AhmedMasud 꽤 명확합니다 ... 정수형으로 변환 할 수있는 객체 만 사용하면됩니다. –

+0

그것은 나를 위해 GCC에서 일하고있어. 몇 가지 코드를 게시 하시겠습니까? – Pubby

답변

2

VC의 버그처럼 보입니다. GCC 4.5 4.7이 컴파일, 아무 문제 :

enum class e { roy, gee, biv }; 

struct s { operator e() { return e::gee; } }; 

void f() { 
    switch (s()) { 
     case e::roy: case e::biv: case e::gee: break; 
    } 
} 

이 더 최소한의 테스트 케이스뿐만 아니라 VC 행복하지 않습니다합니까?