The following syntax is working in OpenCV
Mat R = (Mat_<double>(4, 4) <<
1, 0, 0, 0,
0, cos(alpha), -sin(alpha), 0,
0, sin(alpha), cos(alpha), 0,
0, 0, 0, 1);
How it can be? What operator was overloaded? What is the sense of this expression? Does comma operator can be overloaded in nowadays C++
?
A comma operator can be overloaded, although it is typically not recommended (in many cases the overloaded comma is confusing).
The expression above defines 16 values for 4*4 matrix. If you are wondering how this is possible, I'll show a simpler example. Suppose we want to be able to write something like
MyVector<double> R = (MyVector<double>() << 1 , 2 , 3);
then we can define MyVector so that <<
and ,
operators append new value to the vector:
template<typename T>
class MyVector: public std::vector<T> {
public:
MyVector<T>& operator << (T value) { push_back(value); return *this; }
MyVector<T>& operator , (T value) { push_back(value); return *this; }
...
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With