做一個工廠功能特別感興趣:
template<class Derived>
Base* instantiate(A arg1, B arg2, C arg3) {
return new Derived(arg1, arg2, arg3);
}
使用有意義的鍵類型構建地圖:
std::map<int, Base(*)(A, B, C)> factory;
factory[0] = instantiate<Class1>;
factory[1] = instantiate<Class2>;
factory[2] = instantiate<Class3>;
是的,對於int
,這可能只是一個數組或std::vector
,但我使用上面的std::map
爲了提供通用解決方案。然後您可以以明顯的方式從工廠獲取實例。對於任意的條件下,它不得不是這樣的:
int index = cond1 ? 0
: cond2 ? 1
: cond3 ? 2
: throw std::runtime_error("Invalid index.");
return factory[index](arg1, arg2, arg3);
但是可能有一個理智的方式根據您的問題的細節做到這一點。
這可能是(非常)有助於增加你的目標在... – ChristopheD 2012-02-28 23:40:37
什麼語言哎呀...對不起...添加標籤 – JoelFan 2012-02-28 23:43:00