AQList<T *>
不容易是 const 正确的。考虑函数
void f(QList<T *> list)
{
list[0]->constFunction();
}
我可以将 f 更改为
void f(QList<const T *> list)
但是我不能做
f(QList<T *>()); //Compile error
不再,因为编译器不能隐式QList<T *>
转换为QList<const T *>
. 但是,我可以明确地重新解释 QList,如下所示:
template <typename T> inline QList<const T *> &constList(const QList<T *> &list)
{
return (QList<const T *> &)list;
}
这使我能够使用constList
模板函数将 anyQList<T *>
转换为 a QList<const T *>
,如
f(constList(QList<T *>()));
它似乎工作正常,但这样做真的安全吗?