반응형
여러 조건을 가지는 데이터를 검색할때 if문 중복이 아닌 테이블로 찾는 방법
//메시지 데이터 형을 정의하는 C++예제
enum FieldType{
FieldType_FloatingPoint,
FieldType_Integer,
FieldType_String,
FieldType_TimeOfDay,
FieldType_Boolean,
FieldType_BitField,
FieldType_Last = FieldType_BitFField
};
//객체 형식을 구성하는 C++예제
Class AbstractField{
public :
virtual void ReadAndPrint(string, FileStatus &) = 0;
}
Class FloatingointField : public AbstractField{
public :
virtual void ReadAndPrint(string, FileStatus &){
...
}
}
Class IntegerField ...
Class StringField ...
...
//각각의 객체 형식을 보관하기 위해서 테이블을 구성하는 C++예제
AbstractField* field[Field_Last];
//객체 목록을 구성하는 C++예제
field[Field_RloatingPoint] = new FloatingPointField();
field[Field_Integer] = new IntegerField();
field[Field_String] = new StringField();
field[Field_Boolean] = new BooleanField();
field[Field_BitField] = new BitFieldField();
//테이블에서 객체와 멤버 루틴을 참조하는 C++예제
//밑으로 두줄 이 코드는 메시지에 있는 각 필드를 찾기 위한 보조수단 코드이다.
fieldIdx = 1;
while((fieldIdx <= numFieldsInMessage) and (fileStatus == OK)){
fieldType = fieldDescription[fieldIdx].FieldType;
fieldName = fieldDescription[fieldIdx].FieldName;
//이 코드는 필드의 형식에 따라서 루틴을 호출하는 테이블 참조 루팅이다.
//참조 방식은 객체 테이블에서 인덱스로 찾고 있다.
field[fieldType].ReadAndPrint(fieldName, fileStatus);
}
출처 : Code Complete 18장 테이블을 활용하는 방법
반응형