가능한 중복을 성병 :: istream로부터 열거를 읽기 :
Input from stream to enum type어떻게 일반적인 방식으로
I 클래스 구성원으로서 다른 열거 여러 수업을 내가 읽고 싶은 스트림으로부터의 클래스
다음 코드
가 실시 클래스를 보여줍니다 수 없습니다enum enSide{
eLeft,
eRight
};
enum enType{
eConUndefined,
eConRoom
};
class MyClass{
public:
friend std::istream& operator>>(std::istream& in, MyClass& val) {
in >> val.mSide >> val.mType >> val.mTargetId;
return in;
}
MyClass(){}
private:
enSide mSide;
enType mType;
int mTargetId;
};
불행하게도 이것이 enum
값에 직접 읽기 때문에 작동하지 않습니다 (대한 템플릿 없습니다 >>). 여전히 필요
friend std::istream& operator>>(std::istream& in, MyClass& val) {
ScanTo<enSide> scanside(val.mSide);
ScanTo<enType> scantype(val.mType);
in >> scanside >> scantype >> val.mTargetId;
return in;
}
이 내가 원하는 것을에서 멀지 않은 이미하지만 다음과 같이 MyClass
를 읽는
template<class ENUM>
class ScanTo{
public:
friend std::istream& operator>>(std::istream& in, ScanTo<ENUM>& eval) {
unsigned int val;
in >> val;
eval.mrEnum = static_cast<ENUM>(val);
return in;
}
ScanTo(ENUM& eRef):mrEnum(eRef){}
private:
ENUM& mrEnum;
};
지금 내가 코드를 작성할 수 있습니다
따라서 나는 헬퍼 클래스를 생성 도우미 클래스에 대한 두 가지 방향은 임시로 쓸 수 없습니다.
friend std::istream& operator>>(std::istream& in, MyClass& val) {
in >> ScanTo<enSide>(val.mSide)>> ScanTo<enType>(val.mType) >> val.mTargetId;
return in;
}
은 컴파일시 (gcc 4.43)이 아니기 때문에 임시로 비 const 참조가 주석에서 지적 된 것처럼 금지되어 있습니다.
이 위에서 수행 일부 임시직 및 템플릿에 의존하지 않고 쉽게 수행 할 수 있습니다
그래서 여기에 질문을 온다?
본 적이 있습니까? http://stackoverflow.com/questions/5633784/input-from-stream-to-enum-type – kol
압축 된 버전은 내 VS2010과 완벽하게 통합되어 작동합니다. 어떤 컴파일러를 사용하고 있습니까? –
@dionadar VS가 비 임시 ('myClass & val')에 대한 참조를 확장을 통해 임시 바인딩 ('ScanTo (val.mSide)')에 허용한다고 생각합니다. 그것은 비표준이지만. –
jrok