Я использую tinyxml для разбора XML-файлов, и я обнаружил, что обработка ошибок здесь позволяет использовать код стрелки. Наша обработка ошибок - просто сообщение о сообщении в файл.
Вот пример:
const TiXmlElement *objectType = dataRoot->FirstChildElement( "game_object" );
if ( objectType ) {
do {
const char *path = objectType->Attribute( "path" );
if ( path ) {
const TiXmlElement *instance = objectType->FirstChildElement( "instance" );
if ( instance ) {
do {
int x, y = 0;
instance->QueryIntAttribute( "x", &x );
instance->QueryIntAttribute( "y", &y );
if ( x >= 0 && y >= 0 ) {
AddGameObject( new GameObject( path, x, y ));
} else {
LogErr( "Tile location negative for GameObject in state file." );
return false;
}
} while ( instance = instance->NextSiblingElement( "instance" ));
} else {
LogErr( "No instances specified for GameObject in state file." );
return false;
}
} else {
LogErr( "No path specified for GameObject in state file." );
return false;
}
} while ( objectType = objectType->NextSiblingElement( "game_object" ));
} else {
LogErr( "No game_object specified in <game_objects>. Thus, not necessary." );
return false;
}
return true;
Я не буду пыхтеть и пыхтеть над этим, но если кто-нибудь сможет придумать более чистый способ достижения этого, это будет оценено.
P.S. Исключения не вариант.
Edit:
Было бы что-то подобное предпочтительнее?
if ( !path ) {
// Handle error, return false
}
// Continue
Это исключает код стрелки, но вид кода стрелки помещает всю регистрацию ошибок в одном месте.