我有一個AbstractIndex
定義其Item
的接口和排序和查詢算法。此外,我有幾個具體的指標,如下面的示例FileIndex
。現在我想序列化指標。我想serializeIndex()
的作品,但我無法測試它。在FileIndex::buildIndex()
operator>>
的AbstractIndexProvider::Item
被調用。我試圖downcast _index
但我得到奇怪的編譯時錯誤。使用boost我可以輕鬆聲明類型,但我想放棄boost依賴。 那麼我該怎麼做才能讓Qt在FileIndex::buildIndex()
上實現正確的類?多態指針的序列化QVector
class AbstractIndex
{
public:
class Item;
void query(const QString &req, QVector<Item*> *res);
protected:
virtual void buildIndex() = 0;
virtual void serializeIndex() const = 0;
QVector<Item*> _index;
};
class AbstractIndexProvider::Item
{
public:
QString _name;
// Several pure virtual functions...
// Serialization
friend QDataStream &operator<<(QDataStream &out, AbstractIndexProvider::Item const * const item);
friend QDataStream &operator>>(QDataStream &in, AbstractIndexProvider::Item *item);
};
/**************************************************************************/
class FileIndex : public AbstractIndexProvider
{
public:
class Item;
protected:
void buildIndex() override;
void serializeIndex() const override;
};
class FileIndex::Item : public AbstractIndexProvider::Item
{
friend class FileIndex;
protected:
QString _path;
friend QDataStream &operator<<(QDataStream &out, const FileIndex::Item &item);
friend QDataStream &operator>>(QDataStream &in, FileIndex::Item &item);
};
/**************************************************************************/
void FileIndex::serializeIndex() const
{
QFile file(_indexFile);
if (file.open(QIODevice::ReadWrite| QIODevice::Text))
{
QDataStream stream(&file);
stream << _index;
return;
}
}
/**************************************************************************/
void FileIndex::buildIndex()
{
QFile file(_indexFile);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QDataStream stream(&file);
stream >> _index; // WHAT TO DO HERE?
return;
}
}
所以,你到底有什麼選擇了這樣做,它會工作嗎? – phyatt 2014-10-21 19:10:41