Eigen :: Map 객체에 대한 포인터를 정의 할 수 있습니까? 원래 코드 (의사 코드) 매우 복잡하지만, 여기에 내가 달성하기 위해 노력하고 무엇을지도 본질적으로 이미 포인터이기 때문에이 갱신되도록 간단 할 것이다, 그래서 여기에 포인터를 사용하는 전혀 필요Eigen :: Map <Eigen :: VectorXd> 객체에 대한 C++ 고유 포인터
void testfunction1(... XPtr){
// XPtr is a pointer
// create a vector, map it to a Map object and make XPtr point to the latter
VectorXd Xnew(9);
Xnew << 10, 20, 30, 40, 50, 60, 70, 80, 90;
Map<VectorXd> XnewMap(Xnew.data(), 9);
// make XPtr point to XnewMap so that Xnew data can be
// accessed outside testfunction1()
// ... how? I suspect this to involve some dynamic memory allocation
};
void testfunction2(bool yes){
// main function
VectorXd XR(9);
XR << 1, 2, 3, 4, 5, 6, 7, 8, 9;
const Map<VectorXd> X(XR.data(), 9); // yes the mapped version is needed
// create a pointer to X, say XPtr
// ... how?
if(yes){ // make XPtr point to XnewMap which is defined in testfunction1()
testfunction1(XPtr);
};
//... some computations
// make XPtr point again to X
// ... how?
};
답장을 보내 주셔서 감사합니다. 이것은 현재의 나의 코드가하고있는 일이지만 if else 문이 다른 func을 필요로하기 때문에 읽기가 어렵습니다. 그러나 다른 사람들에게 유용 할 수 있으므로 대답을 받아 들일 것입니다. 그러나, 나는 여전히지도에 대한 포인터를 선언하는 방법을 궁금해합니다 <...> – itQ
'typedef const MapVectorXd ConstMapVectorXd;'를 선언하고 'ConstMapVectorXd *'를 사용합니다. 그러나 참조 된 데이터 모두에 대해 복잡한 동적 메모리 할당을 처리해야합니다. 새로운 Map과 Map 객체 자체는 항상 오류와 메모리 누수가 발생하기 쉽습니다. [placement new] (https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html#title3)을 사용하여 Map 객체 자체를 수정하면 참조 된 데이터의 할당/할당 해제를 처리해야합니다. 더 좋고 만족스럽지 않습니다. – ggael
당신의 완전한 대답은 단지 완벽합니다! 큰 감사! – itQ