Jan*_*egg 10 c++ constructor const initializer-list eigen
我有以下课程:
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;
};
Run Code Online (Sandbox Code Playgroud)
我如何制作m_bar const并将其初始化为a到f作为构造函数中的值?C++ 11也没问题,但初始化程序列表似乎不受eigen支持...
Mar*_* A. 12
我看到最简单的解决方案,因为该类还定义了一个复制构造函数:
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;
};
Run Code Online (Sandbox Code Playgroud)
你可以做一个实用功能
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;
}
Run Code Online (Sandbox Code Playgroud)
然后:
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;
};
Run Code Online (Sandbox Code Playgroud)
或者你可以内联该函数并使用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;
};
Run Code Online (Sandbox Code Playgroud)