你真的想通過名,即一個字符串?然後,你必須提供具有相應功能的Item * - 類,例如
class ItemOne {
static std::string name();
};
ItemGenerator *someItem = new ItemGenerator(ItemThree::name());
或者,你在找的模板?你有不同的可能性有:做一個類模板,也許從ItemGenerator基類派生:
class AbstractItemGenerator { /* ... */ };
template <class Item>
class ItemGenerator {
ItemGenerator();
};
ItemGeneratorBase *someItem = new ItemGenerator<ItemTwo>();
或者只使construtor模板 - 你不能顯式地指定參數,所以使用argumet扣:
//take 1: use pointers
class ItemGenerator {
template <class Item>
ItemGenerator(Item* dummy);
};
ItemGenerator *someItem = new ItemGenerator((ItemFour*)NULL);
//take 2: use a tag struct
template <class I>
struct ItemTag{};
class ItemGenerator {
template <class Item>
ItemGenerator(ItemTag<Item> tag);
};
ItemGenerator *someItem = new ItemGenerator(ItemTag<ItemOne>());
我不確定這些是否適合您的需求。也許要詳細說明你想用什麼。
看看「工廠」的設計模式。 – Max 2013-03-01 16:28:39
你究竟想達到什麼目的?換句話說,'ItemGenerator'是用來處理類名還是'static'成員函數? – 2013-03-01 16:30:23
這真的取決於你想如何使用構造函數中的類。你會得到大量不同的答案,它們會做出不同的假設,並得到不同的結果。 – 2013-03-01 16:40:14