我想用来自地图的值初始化const变量,并想断言地图是否不包含这样的值。
有什么优雅的方法可以做到这一点吗?
我希望c ++ternary operator ?:
可以帮助我解决这个问题,但是此代码无法正常工作,因为ternary operator
双方都希望使用相同的类型。
const auto it = modeMap.find(key);
const Mode myMode = (it != modeMap.end()) ? myMode = it->second : assert(false && "Mode doesn't exist");
错误C2440:“正在初始化”:无法从“无效”转换为“常量模式”
如果您愿意assert
为了引发异常而使用(可能是个好主意)进行交易,则可以通过调用std::map::at
以下代码来简化代码:
const Mode myMode = modeMap.at(key);
std::out_of_range
如果key
不在地图中,则会增加。如果确实需要assert
,则可以将逻辑包装在一个函数中:
const Mode& find_or_assert(const std::map<Key, Mode>& modeMap, const Key& key)
{
auto it = modeMap.find(key);
assert(it != modeMap.end());
return it->second;
}
然后
const Mode myMode = find_or_assert(modeMap, key);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句