我想编写一个故障安全访问的函数std::map
。
在我的代码中的许多地方,我想std::map
通过键访问 a,但如果该键不存在,我希望有一种默认值而不是异常(这是很多“无”的代码)。
我写了这个基于模板的函数
template <typename T1, typename T2>
T2 mapGetByKey(std::map<T1, T2>& map, T1 key, T2 defaultValue={})
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
它工作得很好。但是对于一个std::map<int, const char*>
我想有不同的行为。所以我可以添加这个专业:
template <typename T1>
const char* mapGetByKey(std::map<T1, const char*>& map, T1 key, const char* defaultValue="")
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
它也有效。但我认为这只是一个案例的大量代码。
有没有人知道如何在不设置 defaultValue 的情况下保存线路以""
进行呼叫std::map<int, const char*>
?
有没有办法在编译时区分类型,也许有一些ifdef
或类似的东西?