Eigen :: Карта не создана? - PullRequest
0 голосов
/ 10 июня 2018

Здесь я попытался записать случайные значения в a, используя функцию Eigen:

double *a = (double*)malloc(N*N*sizeof(double));

Map<Matrix<double, N, N, RowMajor> >m(a);
m = MatrixXd::Random(N,N);

Возможно ли выполнить последнюю часть в одной строке (без создания m)?Я воображал что-то вроде

Map<Matrix<double, N, N, RowMajor> >(a) = MatrixXd::Random(N,N);

Но получил

main.cpp:44:42: error: redefinition of 'a' with a different type: 'Map<Matrix<double, N, N, RowMajor> >' vs 'double *'
    Map<Matrix<double, N, N, RowMajor> >(a) = MatrixXd::Random(N,N);
                                         ^
main.cpp:42:13: note: previous definition is here
    double *a = (double*)malloc(N*N*sizeof(double));
            ^
1 error generated.

1 Ответ

0 голосов
/ 10 июня 2018

C ++ будет игнорировать () вокруг a в конструкции, подобной

Type (a) = expr;

. Вы можете написать

( Type(a) ) = expr;

или с C ++ 11:

Type{a} = expr;

В этом случае вы также можете использовать статическую функцию-член Map:

Matrix<double, N, N, RowMajor>::Map(a) = MatrixXd::Random(N,N);

или

Matrix<double, N, N, RowMajor>::Map(a).setRandom(); // size is specified by type
...