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文が別の関数を必要とするため、読みにくくなりますが、他の人にとって役に立つかもしれないので、私はあなたの答えを受け入れます。しかし、私はまだマップへのポインタを宣言する方法が不思議です<...> – itQ
'typedef const MapVectorXd ConstMapVectorXd;'を宣言してから 'ConstMapVectorXd *'を使用しますが、参照されるデータの両方に対して複雑な動的メモリ割り当てを扱わなければなりません新しいMapとMapオブジェクト自体によって、常にエラーやメモリリークが発生しやすくなります。 [placement new](https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html#title3)を使用してMapオブジェクト自体を変更すると、参照されるデータの割り当て/割り当て解除を「唯一」扱わなければならず、満足のいくものではない。 – ggael
あなたの完全な答えは完璧です!巨大な感謝! – itQ