2014-06-17 62 views
0

我有幾類:使用發電機類來生成對象

class Item; 
class Component; 
class BrokenItem; 

我需要能夠從Component小號

這裏不同的組合產生Item期不同配置的是我做了什麼:

class ItemGenerator 
{ 
public: 
    ItemGenerator(const std::vector<Component>& components_); 
    ItemGenerator(const BrokenItem& brokenItem_); 
    // and a few more ways to generate 

    const std::vector<Item>& getGeneratedItems() const; 

private: 
    // vector to store generated objects 
    // a vector is used because multiple combination of 
    // configuration can be generated 
    std::vector<Item> generatedItems_; 
} 

我打算用這種方式:

std::vector<Component> comps { 1000, 1020, 1040, 1080 }; 
ItemGenerator ig(comps); 
std::vector<Item> vi = ig.getGeneratedItems(); 
for (auto i : vi) 
    std::cout << "generated item: " << i << std::endl; 

問題:我這樣做是錯誤的嗎?如果是這樣,有什麼更好的方法?如果不是,我該怎麼做才能讓它變得更好?

+0

是否需要一個類?如果你沒有存儲狀態,這可能只是一個獨立的函數在命名空間。 – DanDan

+0

@DanDan我以爲我可以將類似的功能組合在一起。它不好嗎? – Xan

+1

@Xan C++中「類似函數」的更自然的表達就是使用一個名稱空間,而不是強制使用無用的類層次結構(這在Java中是必需的)。 – Dennis

回答

0

您可以使用命名空間組類似的功能:

namespace ItemGenerator 
{ 
    std::vector<Item> FromComponents(const std::vector<Component>& components); 
    Item FromBrokenItem(const BrokenItem& brokenItem); 
} 
+0

我想這就是它。謝謝! – Xan