While studying openCV, I encountered the following cases.
Range r1(0, 3), r2(3, 7);
int data[] = {
10, 11, 12, 13, 14, 15, 16,
20, 21, 22, 23, 24, 25, 26,
30, 31, 32, 33, 34, 35, 36,
40, 41, 42, 43, 44, 45, 46,
};
Mat m1, m2;
m1 = Mat(4, 7, CV_32S, data);
m2 = m1(r1, r2);
The question I want to ask is the code m1(r1, r2); above.
In the form of m1(); it looks like a function. By the way, m1 is the object name.
How is this possible?
I know it's grammatically distinguishable, but I'm curious about how you can define it in that way. And I wonder what you call that definition.
At m2 = m1(r1, r2); m1 is not thought to be the overloading of the class Mat. What is that called and what grammar is that in which the instance object is a constructor?
I'd appreciate it if you could answer me.
constructor function. constructor. destructor. hmm...
c++ syntax
Objects that can be used like functions are called functioners or function objects.
This can be used by overloading the operator().
The Mat class has Mat operator()(Range row, Range col). This operator provides more concise and intuitive access to the elements in the row.
For example, you can create a void operator()()
to use the object as a function, as shown below.
#include <iostream>
struct Print {
void operator()() {
std::cout << "hello world" << std::endl;
}
void operator()(char const* str) {
std::cout << str << std::endl;
}
};
int main() {
Print p;
p();
p("bye~");
return 0;
}
As you can see, operator()
can use several parameters, which can also be overloaded.
In addition, various operators such as operator[]
, operator*
, operator->
can be overloaded, so please refer to the address below.
http://en.cppreference.com/w/cpp/language/operators
641 GDB gets version error when attempting to debug with the Presense SDK (IDE)
583 Who developed the "avformat-59.dll" that comes with FFmpeg?
945 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
579 rails db:create error: Could not find mysql2-0.5.4 in any of the sources
© 2024 OneMinuteCode. All rights reserved.