Wpis z mikrobloga

@TheNewIcek: A nie ma możliwości, żeby zapisać od razu cały wektor? Póki co próbuje w ten sposób:

binaryFile.write(reinterpret_cast(complexes->data()), n*sizeof(Complex));
Ale przy odczycie mam same zera.
@GaHee: i masz na pewno std::vector * a nie np. std::vector ? W takim wypadku da sie to zrobic w taki sposob jak napisales, chociaz jak juz wspomnialem, moze to byc rozwiazanie nieportowalne.
@GaHee: mógłbyś dodać operatory strumieniowe do Type i potem w pętli każdy element wektora zapisać lub po kolei wczytywać z pliku i dodawać do vectora
@GaHee: błąd jest spowodowany tym, że nie zamykasz pliku przed jego ponownym otwarciem

binaryFile.write(reinterpret_cast(complexes->data()), n*sizeof(Complex));
readFromBinaryFile(n);
binaryFile.close();
@GaHee: polecam nie robić close(), lepiej zdać się na RAII

{
std::fstream binaryFile("pz.dat", std::ios::binary | std::ios::out);
binaryFile.write(reinterpret_cast(complexes->data()), n*sizeof(Complex));
}
readFromBinaryFile(n);
@TheNewIcek: @GaHee: Tak długo dopóki T spełnia wymogi POD tak długo można bezpiecznie zapisać do pliku. Jest is_pod w type_traits aby to sprawddzić.

A endianess będzie tak samo problemem, niezaleznie czy zapiszesz cały blok czy pojedyńcze elementy.
@wolodia: Wiadomo, mowie tylko, ze takie "naiwne" zapisywanie do pliku moze nas zaskoczyc, jezeli zrobisz serializacje/deserializacje to masz mozliwosc kontroli jak zapisujesz elementy, w przypadku write(void *) nie za bardzo jest jakakolwiek kontrola nad tym co robisz. Jest endianess, jest rozmiar slowa, jest padding...