unordered_map似乎没有返回[]运算符的引用

时间:2014-03-29 00:54:21

标签: c++ unordered-map c++14

我目前有一个数据库类,其中包含一些包含数据库变量的无序映射。我编写了添加和删除变量的函数,但现在想要一种方法来轻松访问和修改它们。

我的功能是这样的:

template<typename T>
T &get(const  std::string &name){
    if(typeid(T) == typeid(int))
        return this->ints[name];
    else if(typeid(T) == typeid(float))
        return this->floats[name];

     ... ect ...
}

如果给出了无效的类型,则会抛出错误。

intsstd::unordered_map<std::string, int>类型 同样定义了floats

对我来说,这看起来是正确的。但是当我尝试运行它时,我收到以下错误:

database.hpp:98: error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

看起来无序地图没有返回引用,问题是什么?

1 个答案:

答案 0 :(得分:5)

Unline C#和Java泛型,C ++模板可以是专用的。强烈建议不要以你的方式测试类型。

如果您使用了专业化,那么您就不会遇到此问题,因为它与BartoszKP评论的转化相关。

template<typename T>
T& get(const std::string &name);

在课外,但仍然在标题内:

template<>
int& ClassName::get<int>(const std::string &name) { return ints[name]; }

template<>
float& ClassName::get<float>(const std::string &name) { return floats[name]; }