私は C++98 しか使えずstd::map::at()
、C++11 で追加された実装にはアクセスできません。
私の目標は、のように動作する非メンバー関数at()
関数 (C++98 を使用) を作成することですstd::map::at()
。
したがって、次の非メンバー関数を作成しました。
template<typename K, typename V>
V& at(std::map<K, V> map, K key)
{
if (map.find(key) == map.end())
throw std::out_of_range("key not found");
return map.find(key)->second;
}
私のバージョンがコピーを返したかのように動作するという問題が少なくとも 1 つあります (以下を参照)。
std::map<int,int> myMap;
myMap.insert(std::pair<int,int>(2,43));
// myMap.at(2)=44; // modifies the reference
// assert(44==myMap.at(2)); // fine
at(myMap,2)=44; // does not modify the value inside the map, why?
assert(44==myMap.at(2)); // not fine
- どうすればこの問題に対処できますか?
- ラッパーに他に問題はありますか?