我想创建一个带有这样签名的函数:
// 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);
但是我也想在 map 和 iterator 不是 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
对象传递给期望引用 a 的函数,std::map<Key, Value>::const_iterator
因为它们是不同的类型,而我通常可以,如果它const
是 C++ 声明的一部分,我可以将非常量类型提升为一个常量类型:
void someFunction(const int &arg);
int notConstArg = 0;
someFunction(nonConstArg);
除了使用模板为 提供两个定义lookup()
,一个带有const
参数 2 和 3,另一个带有非 const 参数 2 和 3,C++ 中是否有更好的方法来完成这个,更类似于如何const int &
传递一个非上面示例中的const int
。换句话说,我可以只有一个功能而不是两个吗?