0

前の質問に引き続き、さらに質問があります。ここで、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 つのデータ型で渡すことはできませんか?

前もって感謝します!

4

1 に答える 1