Каков наилучший дизайн для загрузки объекта из файла? Есть много возможностей, некоторые из которых показаны ниже.Загрузить объект из файла дизайна
class object
{
public:
object(const std::string& filename);
};
class object
{
public:
object();
void load_from_file(const std::string& filename);
};
class object
{
public:
static object load_from_file(const std::string& filename);
object(object&& an_object);
};
class object
{
public:
std::unique_ptr<object> load_from_file(const std::string& filename);
};
class object_loader
{
public:
std::unique_ptr<object> load_object_from_file(const std::string& filename);
};
и список продолжается ...
Edit:
дизайн я пошел с этим был:
class object
{
public:
object();
};
class object_loader
{
public:
void load_from_stream(object& an_object, std::istream& input_stream);
};
Честно говоря, вы не должны передавать имя файла вообще. Вы должны передать ссылку 'istream'. Класс не должен знать * где * байты исходят; ему просто нужен способ прочитать байты и понять их. – cHao
Хорошая идея. Тем не менее, какой дизайн является лучшим (просто представьте, что const std :: string & filename заменяется на std :: istream & input_stream)? – Cole
@cHao: Мое мнение по этому вопросу колеблется дико с течением времени. Я не согласен с вами в принципе, но иногда приятно, что вся эта файловая глупость абстрагируется от сайта вызова, а в некоторых приложениях это имеет смысл. –