Je travaille sur une classe de conteneur qui ressemble à ceci:C++ Container/Iterator Dépendance Problème
class hexFile {
public:
HANDLE theFile;
unsigned __int64 fileLength;
hexFile(const std::wstring& fileName)
{
theFile = CreateFile(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL);
if (theFile == INVALID_HANDLE_VALUE);
{
throw std::runtime_error(eAsciiMsg("Could not open file!"));
}
BY_HANDLE_FILE_INFORMATION sizeFinder;
GetFileInformationByHandle(theFile, &sizeFinder);
fileLength = sizeFinder.nFileSizeHigh;
fileLength <<= 32;
fileLength += sizeFinder.nFileSizeLow;
};
~hexFile()
{
CloseHandle(theFile);
};
hexIterator begin()
{
hexIterator theIterator(this, true);
return theIterator;
};
hexIterator end()
{
hexIterator theIterator(this, false);
return theIterator;
};
};
Et une classe itérateur pour correspondre qui ressemble à ceci:
class hexIterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t>
{
hexFile *parent;
public:
bool highCharacter;
__int64 filePosition;
hexIterator(hexFile* file, bool begin);
hexIterator(const hexIterator& toCopy);
~hexIterator();
hexIterator& operator++()
{
return ++this;
}
hexIterator& operator++(hexIterator& toPlus);
hexIterator& operator--()
{
return --this;
}
hexIterator& operator--(hexIterator& toMinus);
hexIterator& operator=(const hexIterator& toCopy);
bool operator==(const hexIterator& toCompare) const;
bool operator!=(const hexIterator& toCompare) const;
wchar_t& operator*();
wchar_t* operator->();
};
Mon problème est ... les deux classes doivent être implémentées en termes de l'autre. Je ne sais pas comment référencer le conteneur à l'intérieur de l'itérateur, par exemple, car lorsque l'itérateur est défini, le conteneur n'a pas encore été défini.
Comment pourrait-on accomplir cela?
Billy3
Mis en ligne pour une réponse correcte, coche pour le plus rapide;) –
vous savez, c'est drôle. Il y a longtemps, j'ai eu un problème similaire à celui-ci, et personne ne m'a dit que je pouvais transmettre une classe ... Je devais aimer, faire une autre classe, avec une fonction virtuelle pure, puis dériver les deux autres classes à partir de là, et utiliser le polymorphisme pour passer les pointeurs les uns des autres ... c'était un gâchis. –