?
Der operator() kommt vor allem zum Tragen, wenn man in C++ funktionale Programmierung anwenden möchte. Klassen oder Structs, die durch den operator() wie Funktionen benutzt werden, werden Funktoren genannt. Die STL unterstützt über den Header <functional> z. Bsp. Funktoren für die Grundrechenarten und bietet z. Bsp. im Header <numeric> Funktionen an, wo die Funktoren als Parameter verwendet werden können. Hier ein kleines Beispiel:
#include <iostream>
#include <vector>
#include <functional>
#include <numeric>
using namespace std;
template<template<typename> class TContainer, template<typename> class TOperation, typename T>
struct Akkumulierer
{
Akkumulierer(T start) : m_start(start) {}
T operator()(const TContainer<T> &values)
{
return accumulate(values.begin(), values.end(), m_start, TOperation<T>());
}
private:
T m_start;
};
int main()
{
vector<int> test;
test.push_back(3);
test.push_back(5);
test.push_back(2);
Akkumulierer<vector, plus, int> summe(0);
Akkumulierer<vector, multiplies, int> produkt(1);
cout << summe(test) << "\n";
cout << produkt(test) << "\n";
}
Funktoren können von C++ Compilern übrigens auch prima ge-inlined werden. Man erhält noch viel zusätzliche Funktionalität, indem man die Boost C++ Libraries verwendet. Dort gibt es unter anderem boost::function und boost::lambda.