如何在静态方法中返回const类型?

时间:2015-04-04 22:40:17

标签: c++

我知道这是由const类型self.at(idx)引起的,但不知道如何在这种静态方法中修复它。

template<class Key, class Val>
struct map_item
{
    typedef std::map<Key,Val> Map;

    static Val& get(Map const& self, const Key idx) { return self.at(idx); }
} // is it legal to be static? but I need 'static'

错误:

error: invalid initialization of reference of type ‘std::basic_string<char>&’ from expression of type ‘const mapped_type {aka const std::basic_string<char>}’
  static Val& get(Map const& self, const Key idx) { return self.at(idx); }

1 个答案:

答案 0 :(得分:1)

只需修复返回类型:

static const Val& get(Map const& self, const Key idx) { return self.at(idx); }
//     ^^^^^

您发布的错误消息中都有解释(重点强调):

  

错误:从类型为'const mapped_type {aka ‘std::basic_string<char>&’ }'

的表达式初始化 const std::basic_string<char> 类型的引用无效

at()会返回const Val&,但您尝试返回Val&并且没有此隐式转换。您只需更改get()的返回类型以匹配at()的返回类型。