问题:
我正在尝试创建一个函数 getmap
得到 map<string, string>
元素,但如果不存在则返回指定的默认值(即 getmap(mymap, "keyA", mydefault);
。
我将其模板化为 int, float
和 char*
返回类型,但出现错误:
error C2664: 'getmap' : cannot convert parameter 3 from 'const char *' to 'char *const '
即使我没有使用 char *const
.为什么会这样?
代码:
template <typename T> inline
T getmap(const std::map<std::string, std::string> &m, const char* key, const T def, T (*f)(const char*) = NULL) {
std::map<std::string, std::string>::const_iterator i = m.find(std::string(key));
return i == m.end() ? def : (f == NULL ? i->second.c_str() : f(i->second.c_str()));
}
inline int getmap(const std::map<std::string, std::string> &m, const char* key, const int def) {
return getmap<int>(m, key, def, &std::atoi);
}
float atofl(const char* s) {
return (float)std::atof(s);
}
inline float getmap(const std::map<std::string, std::string> &m, const char* key, const float def) {
return getmap<float>(m, key, def, &atofl);
}
inline char* getmap(const std::map<std::string, std::string> &m, const char* key, const char* def) {
return getmap<char*>(m, key, def); // ERROR HERE
}
最佳答案
getmap<char*>(m, key, def);
制作T
的 getmap
一个char*
.您接受的第三个参数是 const T
.我知道看起来应该使它成为 const char*
但这实际上使它成为 char* const
.
然后你试图传递一个 const char*
到 char* const
,正如错误所说。您可以将非常量传递给常量,但反之则不行。
所以改为这样写......
getmap<const char*>(m, key, def);
^^^^^
关于c++ - 获取具有默认值的 map 元素的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569110/