我想在类的私有部分中声明来自两个不同类的两个对象。我的问题是第二个对象应该在构造函数中使用第一个对象。这是我的班级私人节的示例:
class FactorGraph
{
private:
gtsam::ISAM2Params _parameters();
gtsam::ISAM2 _isam(_parameters);
应该将_parameters对象作为_isam对象的参数传递,但是据我所知这是不可能的,因为C ++不允许这样做。有一种巧妙的方法吗?
答案 0 :(得分:4)
初始化构造函数中的第二个对象(或同时初始化两者):
FactorGraph::FactorGraph()
: _parameters{}, _isam{_parameters}
{ }
初始化按照类中列出成员的顺序进行(无论此list(!)的顺序如何,因此在此处保持相同的顺序是一个好主意,否则编译器甚至会警告您),这可以保证_isam
不会得到未初始化的任何内容。 (如果您只是在类声明中定义对象,我就不会意识到这种保证。)
在评论中,谢谢@drescherjm:在您的类中,只需声明您的对象不使用初始化程序:
class FactorGraph
{
private:
gtsam::ISAM2Params _parameters;
gtsam::ISAM2 _isam;
当您声明它们没有初始化程序时,应该在构造函数中对其进行初始化。为此,它们不需要默认可构造,对象只初始化一次(在构造函数中)
然后,如果您有更多的构造函数,请不要忘记在任何地方都进行此操作,或者继续进行下去:
FactorGraph(int) : FactorGraph{}, /* other initializers */ { }