C ++ Eigen:取消引用InnerIterator

时间:2016-03-12 13:12:01

标签: eigen eigen3

Matrix<T, Dynamic, Dynamic>::InnerIterator似乎没有使用标准方式(operator *)取消引用它。

它有一个成员函数value()

我感到很惊讶,因为这与第三方算法(如STL算法)不能很好地接口。

为什么它没有声明operator *?更糟糕的是value()不会通过引用返回,因此您无法更改指向元素的基础值。使用它的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是因为大多数情况下,单独的值在没有相应的内部/行/列索引的情况下无效,由private void Form1_Load(object sender, EventArgs e) { this.myBindingSource.DataSource = new SampleModel(); var bindingManager = this.BindingContext[this.myBindingSource]; bindingManager.BindingComplete += bindingManager_BindingComplete; } Dictionary<Control, Color> Items = new Dictionary<Control, Color>(); private void bindingManager_BindingComplete(object sender, BindingCompleteEventArgs e) { var control = e.Binding.Control; //Store Original BackColor if (!Items.ContainsKey(control)) Items[control] = control.BackColor; //Check If there is an error if (!string.IsNullOrEmpty(e.ErrorText)) { control.BackColor = Color.Salmon; this.errorToolTip.SetToolTip(control, e.ErrorText); } else { e.Binding.Control.BackColor = Items[e.Binding.Control]; this.errorToolTip.SetToolTip(control, null); } } 返回。在其他情况下,您只关心指数。无论如何,如果需要,您可以轻松编写一个小包装器以使其与STL兼容。

最后,如果要修改该值,则非const引用返回index()/row()/col()方法。