次のようなシグネチャを持つ関数を作成したいと思います。
// Set found to be an iterator to the location of key in map or end()
// if not found.
bool lookup(const Key &key,
const std::map<Key, Value> &map,
std::map<Key, Value>::const_iterator &found);
しかし、見つかった値を変更できるように、マップとイテレータが const でない場合にも呼び出したいと思います。
const Key key;
std::map<Key, Value> map;
std::map<Key, Value>::iterator found;
if (lookup(key, map, found)) {
found->second.modifingNonConstFunction()
}
std::map<Key, Value>::iterator
しかし、オブジェクトを関数に渡すことができるとは思えません。オブジェクトstd::map<Key, Value>::const_iterator
は型が異なるためです。一方、通常は、const
このような型の C++ 宣言の一部であり、非 const 型をに昇格させることができます。 const 型:
void someFunction(const int &arg);
int notConstArg = 0;
someFunction(nonConstArg);
テンプレートを使用して の 2 つの定義を提供する以外にlookup()
、1 つは引数 2 と 3 で示され、もう 1const
つは非 const 引数 2 と 3 で示されていますが、C++ でこれを達成するためのより良い方法はconst int &
、非 を渡す方法に似ています。int
上記の例ではconstです。つまり、関数を 2 つではなく 1 つにすることはできますか?