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