|Re: [eigen] Bug in traspose|
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
OK, first off I think you're right on this: we need to replace .newline() by operator, because of the relative priority of these operators! http://www.cplusplus.com/doc/tutorial/operators.html operator, has the lowest priority. Whatever set of operators we choose must have equal priorities and left-to-right associativity. The one exception is the first operator which may have higher priority. There is a problem with this: > Matrix2d m; > m <<= (1, 2), > (3, 4); Here the first operator, refers to the object 1 and the compiler will treat it as an "int". Since we can't overload operator, on a POD type, I see no way to make this work. Same problem with every solution you're proposing with a parenthesis ( before the 1. This is why I proposed this list() method. By having MatrixBase::list() return a CommaInitializer, we allow the compiler to understand that the subsequent operator, is CommaInitializer::operator, . But you are right that we may replace list() by an operator (this operator would return an object of type CommaInitializer). I would suggest << instead of <<=, since 1) it has left-to-right associativity and 2) <<= would suggest compound-assignment. > or maybe we don't need end() You are right! The purpose of end() was to check that the initialization list had the right size, but this is better done anyway in the destructor of CommaInitializer. Regarding newline, I see not other solution but doing << Eigen::NewLine. Indeed, << is the only operator with that priority (except >> which would really be nonsensical). So the updated solution would be: Matrix4d m; // or, for dynamic size, MatrixXd m(4,4); m << 1, 2, Eigen::NewLine, 3, 4; Cheers, Benoit
Description: This is a digitally signed message part.
|Mail converted by MHonArc 2.6.19+||http://listengine.tuxfamily.org/|