2011年4月25日 星期一

map initialize的方法

Overloading兩個operator來達成這件事情, 說簡單不簡單, 說難也不難..
  1. overload () 並回傳自己的referernce
  2. overload cast (), 並回傳map
這樣做有什麼好處呢?一來可以在global map或是static map產生時就initialize, 也就不用另外寫一個function叫XXXInit之類的了, 二來這樣寫似乎可讀性也比較好, 把map的initialize的code也refactor過一次, 看來這是不錯的做法...

template<class keyType, class valueType>
class MapInitializer {
public:
MapInitializer(const keyType& key, const valueType& val) {
m_map[key] = val;
}
MapInitializer<keyType, valueType>& operator()(const keyType& key, const valueType& val) {
m_map[key] = val;
return *this;
}
operator std::map<keyType, valueType>() {
return m_map;
}
private:
std::map<keyType, valueType> m_map;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::map<int, int> myMap = MapInitializer<int, int>(1, 2)(3, 4)(5, 6);
return 0;
}

沒有留言: