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”< /> >。