我在程序中使用QVector来存储指向对象(例如FYPE*)的指针。
编译器提示QVector::contains函数期望的参数是TYPE*而不是const TYPE*。使用const_cast操作可以解决这个问题。但是对我来说没有任何意义,因为contains方法不应该改变指针所指向的内容。而使用STL vector的等效代码按预期工作。
这种差异的原因是什么?STL是否特殊处理了容器来保存指针,以便std::find接受指向const对象的指针?我猜涉及到部分模板特化?
class TYPE {
// ....
};
const TYPE *ptrToCst;
QVector<TYPE*> qtVct;
// ...
if (qtVct.contains(ptrToCst)) { // Error!!!
// ....
}
编译器提示QVector::contains函数期望的参数是TYPE*而不是const TYPE*。使用const_cast操作可以解决这个问题。但是对我来说没有任何意义,因为contains方法不应该改变指针所指向的内容。而使用STL vector的等效代码按预期工作。
std::vector<TYPE*> stlVct;
// ...
if (std::find(stlVct.begin(), stlVct.end(), ptrToCst)) { // Ok
// ...
}
这种差异的原因是什么?STL是否特殊处理了容器来保存指针,以便std::find接受指向const对象的指针?我猜涉及到部分模板特化?