topical media & game development
professional-program-15-ExceptionsAndPolymorphism-CatchingPolymorphicallyIncorrect.c
? /
professional-program-15-ExceptionsAndPolymorphism-CatchingPolymorphicallyIncorrect.c
include <fstream>
include <iostream>
include <vector>
include <string>
include <stdexcept>
using namespace std;
void readIntegerFile(const string& fileName, vector<int>& dest)
throw (invalid_argument, runtime_error)
{
ifstream istr;
int temp;
istr.open(fileName.c_str());
if (istr.fail()) {
// We failed to open the file: throw an exception
string error = "Unable to open file " + fileName;
throw invalid_argument(error);
}
// Read the integers one-by-one and add them to the vector
while (istr >> temp) {
dest.push_back(temp);
}
if (istr.eof()) {
// We reached the end-of-file.
istr.close();
} else {
// Some other error. Throw an exception
istr.close();
string error = "Unable to read file " + fileName;
throw runtime_error(error);
}
}
int main(int argc, char** argv)
{
vector<int> myInts;
const string fileName = "IntegerFile.txt";
try {
readIntegerFile(fileName, myInts);
} catch (const exception& e) { // BUG: catching superclass first!
cerr << e.what() << endl;
exit (1);
} catch (const invalid_argument& e) {
// take some special action for invalid filenames
}
for (size_t i = 0; i < myInts.size(); i++) {
cout << myInts[i] << " ";
}
cout << endl;
return (0);
}
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.