класс загрузчика c ++ - PullRequest
       10

класс загрузчика c ++

2 голосов
/ 05 марта 2011

Я думал о классе загрузчика и предложил два разных подхода.

class Loader{
public:
  Loader(const Path& path);
  File load() const;

private:
  Path path_;
};

против

class Loader{
public:
  Loader();
  File load(const Path& path) const;
};

При первом подходе мне нужен один Loader на файл, а класс Loader представляет состояние. Со вторым я могу загружать разные файлы одним классом загрузчика. Помимо этих очевидных различий, какой подход вы бы выбрали и почему, или, может быть, существует третий, возможно, превосходный способ?

Ответы [ 3 ]

2 голосов
/ 05 марта 2011

Есть и другие подходы.

Если вы не поддерживаете состояние в классе Loader при загрузке файла, тогда вы можете просто написать бесплатную функцию

File load(const Path& path); //a free function.

Или вы можете сделать функцию static, если хотите, чтобы она была функцией-членом

class Loader{
public:
  static File load(const Path& path);
};

//usage
Loader::load(path);

Иногда такие решения полностью зависят от ситуации, а иногда от личных предпочтений компании / программиста и вкуса. Нет лучшего решения как такового!

Вы даже можете написать функцию load в самом классе File:

class File {
public:
  bool load(const Path& path); //non-static, or/and the next one!
  static File load(const Path& path); //static
};

В этом, возможно, вы захотите изменить имя функции: open() кажется лучше, чем load().

1 голос
/ 05 марта 2011

Зависит от того, когда информация path станет вам известна. Например, если у вас есть Loader член в классе, но вы еще не знаете путь, когда вы вызываете конструктор этого класса, вам нужно будет сделать что-то вроде второго подхода. Если вы уже знаете путь, тогда первый подход может быть лучше.

В общем, этот вопрос не подходит для всех.

0 голосов
/ 05 марта 2011

Это как раз то, что вам нужно в вашем приложении.Вам нужно государство позже?Или передать инициализированный загрузчик куда-нибудь еще, чтобы выполнить фактическую загрузку?Тогда вам может понадобиться государство.В противном случае нет.

Не существует общего «лучшего» решения.

...