Как сериализовать / десериализовать матрицу, выраженную как указатель на указатель в BOOST C ++ - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю с boost и двумерным массивом чисел с плавающей точкой, выраженных в виде двойного указателя (float **). К моменту, когда я выделяю памяти две загрузки значения (при десериализации), я не знаю и не нашел никакой информации о том, как это сделать.

            int i;
            array    = (float**) malloc(N * sizeof(float*));
            assert(array == NULL);
            for (i=0; i<N; i++) {
                    array[i] = (float*)  malloc(N * sizeof(float));
                    assert(array[i] == NULL);
            }

Я пробовал несколько вещей, таких как сериализация один за другим массивов внутри, но не работает. Также вы знаете документацию по этому поводу? Я нашел несколько примеров сериализации, но они очень просты.

Спасибо.

EDIT

Я изменил malloc с помощью конструкторов типа float. Дело в том, что сейчас невозможно даже скомпилировать.

        if (Archive::is_loading::value)
    {

            assert(array == NULL);
            array = new float*[N];

            int i;
            for (i=0; i<N; i++) {

                    assert(array[i] == NULL);
                    array[i] = new float[M];
            }
    }

    ar & array;

Это дает мне следующую ошибку:

error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘float*’
       t.serialize(ar, file_version);

Невозможно сериализовать float * или я что-то упустил?

...