2
是否可以定義指向特徵:: Map對象的指針?原始代碼是非常複雜,但這裏是我想實現(僞代碼)C++特徵指針指向Eigen :: Map <Eigen :: VectorXd>對象
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語句需要不同的func,但我會接受你的答案,因爲它可能對其他人有用。然而,我仍然想知道如何聲明一個指向Map的指針<...> – itQ
沒有什麼棘手的,只是聲明'typedef const MapVectorXd ConstMapVectorXd;'然後使用'ConstMapVectorXd *',但是你必須處理複雜的動態內存分配通過新的Map和Map對象本身,這總是容易出錯和內存泄漏。如果您使用[placement new](https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html#title3)修改Map對象本身,您將「僅」必須處理引用數據的分配/釋放,更好,並不令人滿意。 – ggael
您的完整答案只是完美!非常感謝! – itQ