mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 04:41:16 +00:00
Added a templated derived exception to KeyNotFound so that you can figure out *which* key wasn't found.
This commit is contained in:
@@ -79,6 +79,20 @@ namespace YAML
|
||||
: RepresentationException(line_, column_, ErrorMsg::KEY_NOT_FOUND) {}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class TypedKeyNotFound: public KeyNotFound {
|
||||
public:
|
||||
TypedKeyNotFound(int line_, int column_, const T& key_)
|
||||
: KeyNotFound(line_, column_), key(key_) {}
|
||||
|
||||
T key;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
TypedKeyNotFound <T> MakeTypedKeyNotFound(int line, int column, const T& key) {
|
||||
return TypedKeyNotFound <T> (line, column, key);
|
||||
}
|
||||
|
||||
class BadDereference: public RepresentationException {
|
||||
public:
|
||||
BadDereference()
|
||||
|
@@ -119,7 +119,7 @@ namespace YAML
|
||||
}
|
||||
}
|
||||
|
||||
throw KeyNotFound(m_line, m_column);
|
||||
throw MakeTypedKeyNotFound(m_line, m_column, key);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
@@ -11,11 +11,13 @@ void run()
|
||||
YAML::Parser parser(fin);
|
||||
YAML::Node doc;
|
||||
parser.GetNextDocument(doc);
|
||||
for(unsigned i=0;i<doc.size();i++) {
|
||||
bool value;
|
||||
doc[i] >> value;
|
||||
std::cout << (value ? "true" : "false") << "\n";
|
||||
}
|
||||
|
||||
std::cout << "name: " << doc["name"] << "\n";
|
||||
std::cout << "age: " << doc["age"] << "\n";
|
||||
} catch(YAML::TypedKeyNotFound <std::string>& e) {
|
||||
std::cout << "Key '" << e.key << "' not found at line " << e.line+1 << ", col " << e.column+1 << "\n";
|
||||
} catch(YAML::KeyNotFound& e) {
|
||||
std::cout << "Key not found at line " << e.line+1 << ", col " << e.column+1 << "\n";
|
||||
} catch(YAML::Exception& e) {
|
||||
std::cout << "Error at line " << e.line+1 << ", col " << e.column+1 << ": " << e.msg << "\n";
|
||||
}
|
||||
|
@@ -1,7 +1,3 @@
|
||||
- true
|
||||
- n
|
||||
- Off
|
||||
- YES
|
||||
- on
|
||||
- FALSE
|
||||
- FaLse
|
||||
name: Brett Favre
|
||||
position: QB
|
||||
teams: [ Falcons, Packers, Jets ]
|
Reference in New Issue
Block a user