C++ 我可以在模板参数中使用指针吗?
我正试着做这样的事情:C++ 我可以在模板参数中使用指针吗?,c++,templates,C++,Templates,我正试着做这样的事情: 模板 类TEncodingCache { 公众: ToType*Get(const FromType*Source) { 返回数据[源]; } 私人: 地图数据; }; 在主要功能方面: TEncodingCache; cache.Get(“test”); 我得到这个错误: binary'[':未找到接受“const FromType*”类型的右操作数的运算符(或没有可接受的转换) 我可以在模板参数中使用指针吗 对 我得到这个错误:二进制“[”:没有找到接受 “con
模板
类TEncodingCache
{
公众:
ToType*Get(const FromType*Source)
{
返回数据[源];
}
私人:
地图数据;
};
在主要功能方面:
TEncodingCache;
cache.Get(“test”);
我得到这个错误:
binary'[':未找到接受“const FromType*”类型的右操作数的运算符(或没有可接受的转换)
我可以在模板参数中使用指针吗
对
我得到这个错误:二进制“[”:没有找到接受
“const FromType*”类型的右操作数(或没有
可接受的转换)
发生此错误的原因是std::map
需要类型为FromType*
的键,而您正试图将类型为const FromType*
的Source
参数传递给它。编译器不允许这样做,因为这会违反const正确性保证(即,当您声明Source
为const FromType*
类型时,您实际上承诺函数不会修改指针指向的对象,并且将Source
传递给std::map::operator[]
作为FromType*
将允许std::map::operator[]
修改它(如果需要)
简单的解决方法是将您的成员变量更改为:
std::map<const FromType*, ToType*> Data;
std::地图数据;
<代码> > < <代码> >参数是<代码> const FromType */COD>,但您的地图的键是“代码> FasType *<代码>。您是否知道在C++中,不能将指针转换为常量对象,而不能将指针转换为非常量对象,并且只能将指针与同一类型进行比较,而且指针比较不是可移植的,除了某些狭窄的情况之外,为什么显示的代码不工作,有很多原因,包括未定义的行为。C++根本不这样工作。注意C++中没有保证有<代码>“test”=“test”< /> >。