Depending on what you prefer to read, there are many definitions and explanations of Functors.
From the function pointer tutorial:
Functors are functions with a state. In C++ you can realize them as a class with one or more private members to store the state and with an overloaded operator () to execute the function. Functors can encapsulate C and C++ function pointers employing the concepts templates and polymorphism. You can build up a list of pointers to member functions of arbitrary classes and call them all through the same interface without bothering about their class or the need of a pointer to an instance. All the functions just have got to have the same return-type and calling parameters. Sometimes functors are also known as closures. You can also use functors to implement callbacks.
From StackOverflow:
- A functor is pretty much just a class which defines the operator(). That makes it "look like" a function.
- Another advantage to a functor over a pointer to a function is that the call can be inlined in more cases.
- You can use boost::function, to create functors from functions and methods
//Program tested on Microsoft Visual Studio 2008 - Zahid Ghadialy
//Program to demonstrate the use of functors
#include<iostream>
using namespace std;
class someClass
{
public:
someClass(int x) : someVariable(x) {}
int operator()(int y) {return (someVariable + y);}
int internalStateValue(){return someVariable;}
private:
int someVariable;
};
int main()
{
someClass class1(50);
someClass class2(75);
cout<<"Class1 state variable value is : "<<class1.internalStateValue()<<endl;
cout<<"Class2 state variable value is : "<<class2.internalStateValue()<<endl;
int test1 = class1(22);
cout<<"Test 1 value is : "<< test1<<endl;
int test2 = class2(22);
cout<<"Test 2 value is : "<< test2<<endl;
cout<<"Class1 final state variable value is : "<<class1.internalStateValue()<<endl;
cout<<"Class2 final state variable value is : "<<class2.internalStateValue()<<endl;
return 0;
}
The output is as follows:
This example is really working. I'm looking for an explanation what's the idea of functors, or what's the difference between a functor and a pointer to a function?
ReplyDeleteit really helps me putting my FSM table accessing in c++ code.
ReplyDelete