我有以下课程:
class Foo
{
public:
Foo(double a, double b, double c, double d, double e)
// This does not work:
// : m_bar(a, b, c, d, e)
{
m_bar << a, b, c, d, e;
}
private:
// How can I make this const?
Eigen::Matrix<double, 5, 1, Eigen::DontAlign> m_bar;
};
如何在构造函数中创建m_bar const并将其初始化为a到f的值? C ++ 11也没问题,但是eigen ......似乎不支持初始化列表。
答案 0 :(得分:9)
我从课堂上看到的最简单的解决方案defines a copy constructor:
class Foo
{
public:
Foo(double a, double b, double c, double d, double e) :
m_bar( (Eigen::Matrix<double, 5, 1, Eigen::DontAlign>() << a, b, c, d, e).finished() )
{
}
private:
const Eigen::Matrix<double, 5, 1, Eigen::DontAlign> m_bar;
};
答案 1 :(得分:5)
你可以做一个实用功能
Eigen::Matrix<double, 5, 1, Eigen::DontAlign>
make_matrix(double a, double b, double c, double d, double e)
{
Eigen::Matrix<double, 5, 1, Eigen::DontAlign> m;
m << a, b, c, d, e;
return m;
}
然后:
class Foo
{
public:
Foo(double a, double b, double c, double d, double e) :
m_bar(make_matrix(a, b, c, d, e))
{
}
private:
const Eigen::Matrix<double, 5, 1, Eigen::DontAlign> m_bar;
};
或者您可以内联该功能并使用finished() :
class Foo
{
using MyMatrice = Eigen::Matrix<double, 5, 1, Eigen::DontAlign>;
public:
Foo(double a, double b, double c, double d, double e) :
m_bar((MyMatrice() << a, b, c, d, e).finished())
{
}
private:
const MyMatrice m_bar;
};