我有以下两个功能:
Thing* find_thing_by_name(const String & name, Map<String,Thing*> & thing_map)
{
auto it = thing_map.find(name);
return it->second;
}
const Thing* find_thing_by_name(const String & name, const Map<String,Thing*> & thing_map)
{
auto it = thing_map.find(name);
return it->second;
}
Run Code Online (Sandbox Code Playgroud)
这只是我想要解决的问题的一个简单示例.
函数具有完全相同的主体,但我需要处理我的地图的const和非const版本.我已经看到使用const转换使用成员函数处理此问题,但这些是非成员函数,我想使用模板解决此问题.如何编写一个减少代码重复的模板化函数?我甚至不确定从哪里开始.
你可以:
template <typename MAP>
auto find_thing_by_name(const String & name, MAP & thing_map)
{
auto it = thing_map.find(name);
return it->second;
}
Run Code Online (Sandbox Code Playgroud)
然后
String s = ...;
Map<String,Thing*> nonconst_m = ...;
const Map<String,Thing*> const_m = ...;
find_thing_by_name(s, nonconst_m); // MAP is deduced as Map<String,Thing*>
// thing_map's type is Map<String,Thing*>&
find_thing_by_name(s, const_m); // MAP is deduced as const Map<String,Thing*>
// thing_map's type is const Map<String,Thing*>&
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |