Using Lambdas in C++: Listing 2
Function objects in C++.
// SaveFunction object as an interface.
// Interfaces in C++ are conceptual. It's not that they don't exist, but they are a special
// case of abstract classes whose methods are all pure virtual (declared as "=0" and
// therefore not defined.
class SaveFunction
{
public:
virtual int operator()(Image image, string filepath) =0;
};
class SaveAsPNG : SaveFunction
{
public:
int operator()(Image image, string filepath)
{
...
}
};
class SaveAsGIF : SaveFunction
{
public:
int operator()(Image image, string filepath)
{
...
}
};
class SaveAsTIFF : SaveFunction
{
public:
int operator()(Image image, string filepath)
{
...
}
};
class SaveAsJPG : public SaveFunction
{
public:
int operator()(Image image, string filepath)
{
...
}
};
// These two lines instance the JPG functor and invoke it.
SaveAsJPG saveFunction;
saveFunction(im, "my_image");
About the Author
Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at [email protected].