Jak dobrze przeprowadzic rzutowanie

0

Na poczatek zaznacze ze jestem nowicjuszem :)

Przy probie kompilacji kodu napisanego pod VS6 w VS2005 kompolator wyrzucil mi bledy dotyczace konwersji np przy wywolaniu tej funkcji:
SecureZeroMemory(i->second.begin() , i->second.size());
kompilator nie mogl przekonwertowac pierwszego argumentu z iteratora na PVOID

a przy funkcji :
void readFromBuffer(std::basic_string<T> &val)
{
readBytesFromBuffer(val.begin(), size sizeof(T));
}
parametr val.begin moze byc rzutowany na type BYTE
bo wlasnie takiego typu spodziewa sie funkcja

Poprawilem te bledy tak ze kompilator juz nie ma zastrzezen ale czy takie rzutowanie ma sens?. I czy nie nie zmieni dzialania programu ?
A oto przerobki:

PVOID param1 = &(i->second.begin());
SecureZeroMemory(param1 , i->second.size());
i
void readFromBuffer(std::basic_string<T> &val)
{

                    std::string::iterator  iter = val.begin();
                    BYTE* param = reinterpret_cast<BYTE *>(&iter);//
                    readBytesFromBuffer(param, size * sizeof(T));
            }

z gory dzieki za pomoc

0

Przy STLowskich iteratorach nie tylko nie ma to sensu, ale niemal gwarantuje segfault - interpretujesz sam iterator jako dane na ktore ma wskazywac. Iteratory maja przeciazony operator * dzieki czemu potrafia udawac wskazniki - zapis ktorego szukasz to najpewniej &(*val.begin()).

Nie prosciej uzyc string.c_str() ?

0

Jeżeli i->second to vector to:

SecureZeroMemory(&i->second.front() , i->second.size());
0

Czyli
PVOID param1 = &(*i->second.begin());
i
std::iterator iter = val.begin();
BYTE
param = reinterpret_cast<BYTE *>(&iter)

Zalatwi sprawe ?
RSH a moglbys mi napisac jakby to mialo wygladac z uzyciem string.c_str()

0

Raczej:

std::string::iterator  iter = val.begin();
BYTE* param = reinterpret_cast<BYTE *>(&(*iter));

Co do c_str() albo data() (to samo, ale pierwsze bierze pod uwage null a drugie nie) byloby to cos w stylu:

readBytesFromBuffer(val.c_str(), size * sizeof(T));

Uwaga na const, jesli readBytesFromBuffer nie bierze const w argumencie to rozwiazanie raczej nie przejdzie.

0

Wielki dzieki. Moglbys mi jeszcze podac jakies namiary(kasiazke,e-book) skad moglbym sie wiecej dowiedziec o iteratorach, bo z tego co znalazlem jest opisane tylko ogolnikowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1