사용자 정의 유형에 switch
을 사용하려고합니다. 이 표준은스위치의 클래스 유형 사용
조건은 정수형, 또는 통합 또는 열거 형 단일이 아닌 명시 적 변환 함수가 존재하는 대한 클래스 형 (12.3)의 열거 형이어야한다 말한다. 조건이 클래스 유형 인 경우 변환은 함수를 호출하여 변환되며이 섹션의 나머지 부분에 대해서는 원래 조건 대신 변환 결과가 사용됩니다. 통합 프로모션이 수행됩니다.
이것은 enum
입력 한 암시 변환 기능을 갖는 타입 유효 switch
표현되어야한다고 제안한다. 그러나이 문구를 사용하려고 할 때 Visual Studio는 스위치식이 정수가 아닌 것에 대한 오류를 제공합니다. VS가이 영역에서 비준수입니까?
클래스 타입의 정의가 begin
vector<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:
}
재미있게 ... 의사 코드를 게시 할 수 있습니까? –
@AhmedMasud 꽤 명확합니다 ... 정수형으로 변환 할 수있는 객체 만 사용하면됩니다. –
그것은 나를 위해 GCC에서 일하고있어. 몇 가지 코드를 게시 하시겠습니까? – Pubby