2011-03-05 27 views
2

我正在考慮一個加載程序類,並提出了兩種不同的方法。C++加載程序類

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類代表一個州。隨着第二個,我可以加載不同的文件與一個裝載機類。 除了這些明顯的差異,你會選擇哪種方法,爲什麼還是有第三種方法?

回答

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()更好。

0

這取決於您的應用需求。你以後需要這個國家嗎?或者將其他地方的初始化加載器傳遞給實際負載?那麼你可能需要這個狀態。否則不是。

沒有一般的「最佳」解決方案。

1

這取決於您知道path信息的時間。如果例如在類中有一個Loader成員,但在調用該類的構造函數時,您還不知道路徑,因此您需要執行類似於第二種方法的操作。如果你確實知道路徑,那麼第一種方法可能會更好。

一般來說,這不是一個適合所有問題的問題。