Здравствуйте, SmileIlya, Вы писали:
SVZ>>Только получается аццкая смесь из С и С++. Уверен, что твою задачу по-другому не решить?
SI>Других вариантов нет. Это ф-ция одна из в чудо ядре. Писали давно и универсально
SI>После всех этих развлечений, надо снова получить vector<double>
А на принимающей стороне известно, что принятая пачка байтов это vector<double>? Размер массива известен или надо передать вместе с "полезной нагрузкой" или можно вычислить из размера блока памяти?
Что-то мне подсказывает, что стоит посмотреть, как работает сериализация.
И решить, достаточно ли передавать просто массив даблов или еще записывать количество элементов.
Т.е. либо
fun(&vDouble[0], sizeof(double) * vDouble.size());
Либо (псевдокод):
ByteOStream bs; // Сериализовать массив
bs << vDouble.size(); // Записать размер массива
bs.write(&vDouble[0], sizeof(double) * vDouble.size()); // Записать данные
const void* pValue = bs.getBytes(); // Блок байт
size_t sz = bs.size(); // размер блока в байтах
fun(pValue, sz); // суперъядерное копирование
...
// И на принимающей стороне:
const void* pValue = ... // Принять блок памяти
size_t sz = ...
ByteIStream bs(pValue, sz); // Десериализовать
size_t num = 0;
bs >> num;
std::vector<double> another_vDouble(num); // Выделить память
bs.read(&another_vDouble[0], num); // Загрузить полезные данные