C++ вектор векторов

Мне нужно создать std::vector, содержащий векторы Eigen::Vector2d. Вот как я делаю объявление:

std::vector< std::vector< Eigen::Vector2d > >  markingsPointSets;

и я пытаюсь отодвинуть некоторые элементы, которые я создал следующим образом:

Eigen::Vector2d firstMarkingPoint(markingPointA[0] + AB_perp[0] * .15, markingPointA[1] + AB_perp[1] * .15); // Don't mind to the value of this variable :p

markingsPointSets.at(i).push_back(firstMarkingPoint);

но это дает мне:

error c2719 formal parameter with __declspec(align('16')) won't be aligned

Пожалуйста, сообщите мне, если есть недостающая информация, чтобы найти источник этой проблемы.


person kamel kamelus    schedule 20.07.2015    source источник
comment
Добро пожаловать в StackOverflow. Просто дикая догадка, но объявлен ли Vector2d с определенными настройками выравнивания, которые не могут быть гарантированы при помещении его в std::vector?   -  person Remy Lebeau    schedule 21.07.2015
comment
См. этот вопрос.   -  person Beta Carotin    schedule 21.07.2015


Ответы (1)


Вероятно, вы не читали документацию:

Использование контейнеров STL для векторизуемых типов Eigen фиксированного размера или классов, содержащих элементы таких типов, требует выполнения следующих двух шагов:

  • Должен использоваться распределитель с выравниванием по 16 байтам. Eigen предоставляет готовый к использованию вариант:align_allocator.

  • Если вы хотите использовать контейнер std::vector, вам нужно #include ‹ Eigen/StdVector ›.

Эти проблемы возникают только с векторизуемыми типами Eigen фиксированного размера и структурами, имеющими такие объекты Eigen в качестве члена. Для других типов Eigen, таких как Vector3f или MatrixXd, не требуется особой осторожности при использовании контейнеров STL.

(выделено мной)

person Tas    schedule 20.07.2015