Cof*_*ode -2 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 ...
}
Run Code Online (Sandbox Code Playgroud)
如果给出了无效类型,则抛出错误.
ints是类型std::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'
Run Code Online (Sandbox Code Playgroud)
看起来无序地图没有返回引用,问题是什么?
取消C#和Java泛型,C++模板可以是专用的.强烈建议不要以您的方式测试类型.
如果您使用了专业化,那么您就不会遇到这个问题,因为它与BartoszKP评论的转换有关.
template<typename T>
T& get(const std::string &name);
Run Code Online (Sandbox Code Playgroud)
在课外,但仍然在标题内:
template<>
int& ClassName::get<int>(const std::string &name) { return ints[name]; }
template<>
float& ClassName::get<float>(const std::string &name) { return floats[name]; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |