У меня есть какой-то идеологический вопрос, поэтому:
Предположим, у меня есть какая-то шаблонная функция
template <typename Stream>
void Foo(Stream& stream, Object& object) { ... }
, которая что-то делает с этими object
и stream
(например, сериализует этот объект в поток или что-то в этом роде.)
Допустим, я также добавил несколько простых оболочек, таких как (и скажем, числоиз этих оболочек равно 2 или 3):
void FooToFile(const std::string& filename, Object& object)
{
std::ifstream stream(filename.c_str());
Foo(stream, object);
}
Итак, мой вопрос:
Где в этом случае (идеологически) я должен выбросить исключение, если мой stream
плох?Должен ли я сделать это в каждой оболочке или просто перенести этот чек на мой Foo
, чтобы его тело выглядело как
if (!foo.good()) throw (something);
// Perform ordinary actions
Я понимаю, что это может быть не самой важной частью кодирования и этих решенийна самом деле равны, но я просто не хочу знать "правильный" способ реализовать это.
Спасибо.