A QList<T *>不容易纠正.考虑这个功能
void f(QList<T *> list)
{
list[0]->constFunction();
}
Run Code Online (Sandbox Code Playgroud)
我可以改变f到
void f(QList<const T *> list)
Run Code Online (Sandbox Code Playgroud)
但后来我不能这样做
f(QList<T *>()); //Compile error
Run Code Online (Sandbox Code Playgroud)
再也没有了,因为编译器不能隐含地强制转换QList<T *>为QList<const T *>.但是,我可以明确地重新解释QList,如下所示:
template <typename T> inline QList<const T *> &constList(const QList<T *> &list)
{
return (QList<const T *> &)list;
}
Run Code Online (Sandbox Code Playgroud)
这使我能够使用constList模板函数将任何内容QList<T *>转换为a QList<const T *>,如
f(constList(QList<T *>()));
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但实际上这样做是否安全?