Zdravim, mám takový problem, potrebuju pretypovat tridu na jejiho potomka a vratit tak iterator na celou kolekci, ale nejak mi to nejde :/
Přikládám ukázku jak to myslim i s komentem
#include <QCoreApplication>
#include <QSharedPointer>
#include <QMap>
#include <QDebug>
class IUser
{
public:
virtual void show() = 0;
};
class User : public IUser
{
public:
User() {}
void show() {}
void destroy() {}
};
class MainClass
{
public:
MainClass()
{
m_users["a"] = QSharedPointer<User>(new User);
m_users["b"] = QSharedPointer<User>(new User);
}
QMapIterator<QString, QSharedPointer<IUser> > users() const
{
// toto nejde a tohle potrebuju nejak opravit... potrebuju ziskat iterator na tu kolekci QMap
// nejde mi to pretypovat a pritom nechapu nejak proc, kdyz IUser je predek User
// tipuju ze bude problem nejak v tom QSharedPointer, ale toho bych tam
// potreboval mit, protoze je typove bezpecnej mezi vice-vlaknovou app a neni potreba pouzivat mutex
return reinterpret_cast<QMapIterator<QString, QSharedPointer<IUser> > >(m_users.constBegin());
}
private:
QMap<QString, QSharedPointer<User> > m_users;
};
int main()
{
MainClass mc;
QMapIterator<QString, QSharedPointer<IUser> > it = mc.users();
while (it.hasNext()) {
it.value().data()->show();
it.next();
}
return EXIT_SUCCESS;
}
diky za kazdou radu