A QList
не может быть легко корректным с константой. Рассмотрим функцию
void f(QList<T *> list)
{
list[0]->constFunction();
}
. Я могу изменить f на
void f(QList<const T *> list)
, но тогда я больше не могу делать
f(QList<T *>()); //Compile error
, поскольку компилятор не может неявно преобразовать QList
в QList
. Однако я могу явно переинтерпретировать преобразование QList следующим образом:
template <typename T> inline QList<const T *> &constList(const QList<T *> &list)
{
return (QList<const T *> &)list;
}
Это позволяет мне использовать функцию шаблона constList
для преобразования любого QList
в QList
, как в
f(constList(QList<T *>()));
, и кажется, что он работает нормально, но действительно ли это безопасно?