前の質問に引き続き、さらに質問があります。ここで、2 種類の Eigen パラメータを 1 つの型で渡したいと考えています。(1) 固定サイズの行列、または (2) 行は固定されていますが列は動的です。両方の行列の行は常に 3 である必要があります。修正された関数は次のとおりです。
template<typename Derived>
typename Derived::PlainObject bar(const Eigen::MatrixBase<Derived>& v)
{
// EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived);
// EIGEN_STATIC_ASSERT(Derived::RowsAtCompileTime == 3,
// THIS_METHOD_IS_ONLY_FOR_MATRICES_OF_A_SPECIFIC_SIZE);
assert(v.rows() == 3);
typename Derived::PlainObject ret;
std::cout << "v size : " << v.rows() << ", " << v.cols() << std::endl;
std::cout << "ret size: " << ret.rows() << ", " << ret.cols() << std::endl;
return ret;
}
関数で渡されたパラメーターと同じサイズの変数を作成したいv
。固定サイズの行列を渡すことは問題ありませんが、動的 (列) サイズの行列では問題ありません。ret
ダイナミクス サイズ マトリックスの列数は 0 です。
void main()
{
int n = 1000;
Eigen::Matrix<double, 3, Dynamic> A1 = Eigen::Matrix<double, 3, Dynamic>::Random(3, n);
Eigen::Matrix<double, 3, 1000> B1 = Eigen::Matrix<double, 3, 1000>::Random();
Eigen::Matrix<double, 3, Dynamic> A2 = bar(A1);
Eigen::Matrix<double, 3, 1000> B2 = bar(B1);
}
出力:
v size : 3, 1000
ret size: 3, 0
v size : 3, 1000
ret size: 3, 1000
変数を作成する一貫した方法はありますか? または、それらを 1 つのデータ型で渡すことはできませんか?
前もって感謝します!