使用模板减少const和非const非成员函数的代码重复

Dil*_*123 5 c++ templates

我有以下两个功能:

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转换使用成员函数处理此问题,但这些是非成员函数,我想使用模板解决此问题.如何编写一个减少代码重复的模板化函数?我甚至不确定从哪里开始.

son*_*yao 4

你可以:

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)