c ++ Loader类

时间:2011-03-05 11:17:53

标签: c++ loader

我在想一个装载机类,并提出了两种不同的方法。

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

private:
  Path path_;
};

VS

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

使用第一种方法,每个文件需要一个Loader,而Loader类代表一个状态。使用第二个,我可以使用一个加载器类加载不同的文件。 除了这些显而易见的差异,你会选择哪种方法,为什么还是有第三种可能是优越的方式?

3 个答案:

答案 0 :(得分:2)

还有其他方法。

如果在加载文件时没有在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 :(得分:1)

这取决于何时知道path信息。如果是你在一个类中有一个Loader成员,但是当你调用该类的构造函数时,你不需要知道路径,你需要做第二种方法。如果您确实知道路径,那么第一种方法可能会更好。

一般来说,这不是一个适合所有人的问题。

答案 2 :(得分:0)

这取决于您在应用程序中的需求。你以后需要这个州吗?或者将初始化的加载器传递到其他地方以进行实际加载?那你可能需要这个州。否则不会。

没有一般的“最佳”解决方案。