Function Objects Functors
Write classes with operator() to create stateful callable objects.
Function Objects Functors is a free C++ Academy lesson on CoddyKit. This is lesson 1 of 4. Any 3 lessons of this learning path are free to read in full — after that, CoddyKit PRO unlocks every lesson, plus hands-on practice with a built-in code editor and a 24/7 AI tutor. It is part of the C++ Academy learning path, and your progress syncs across the web and the CoddyKit app. The C++ Academy course includes 4 lessons in total.
What is a Functor?
A functor (function object) is a class that overloads operator(). Instances can be called like functions.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Why Not Just a Function?
Functors carry state. A plain function does not. State enables configuration, counting, and stateful callbacks.
struct Counter {
int count = 0;
int operator()(int x) { ++count; return x; }
};
Counter c;
c(10); c(20); c(30);
std::cout << c.count; // 3Configurable Behavior
Store configuration in the functor s members. The same functor type works for many parameter sets.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
over10(15); // true
over10(5); // falseUsing Functors with STL Algorithms
STL algorithms accept anything callable — functors, lambdas, function pointers.
std::vector<int> v = {1, 11, 5, 99, 8};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});
std::cout << *it; // 11Predefined Functors in <functional>
The standard library provides ready-made functors: std::plus, std::less, std::equal_to, std::negate, and more.
#include <functional>
std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), std::greater<int>{});
// sorted descendingFunctor vs Function Pointer
Functors usually inline better because their operator() is a direct call. Function pointers can be more flexible but indirect.
Functors as Template Parameters
Many STL containers and algorithms accept a functor as a template parameter — set comparators, hash functions, allocators.
std::set<int, std::greater<int>> s = {1, 2, 3};
// s iterates in descending order: 3, 2, 1Lambdas Are Functors
The compiler generates a unique class with operator() for every lambda. Lambdas are syntactic sugar over functors.
When to Write a Functor
Use a hand-written functor when:
- The same logic is used many places (give it a name)
- It is part of your public API
- It needs to be copy/move constructible with specific behavior
When to Use a Lambda Instead
For one-off usage, a lambda is shorter and clearer. For reusable behavior, a named functor improves readability.
Composability
Combine functors using std::bind or, more modernly, by composing lambdas. Functional libraries like Boost provide combinators too.
Quick Check
What is the main capability of a functor compared to a plain function?
Recap
A functor is a class with operator(). It carries state, integrates with STL algorithms, and serves as the foundation for lambdas. Use named functors for reusable behavior, lambdas for one-shot logic.
Learn C++ with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 51
- Lessons
- 203
Frequently Asked Questions
Is the “Function Objects Functors” lesson free?
Yes — any 3 lessons of the C++ Academy learning path, including “Function Objects Functors”, are free to read in full here on the web. After that, CoddyKit PRO unlocks every lesson, plus interactive practice with a built-in code editor and a 24/7 AI tutor. The C++ Academy course includes 4 lessons in total.
What will I learn in “Function Objects Functors”?
Write classes with operator() to create stateful callable objects. You practise C++ Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start C++ Academy?
No prior experience is required. C++ Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 1 of 4.
How long does the “Function Objects Functors” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this C++ Academy lesson?
Yes. Every C++ Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Function Objects Functors
- Lambda Captures by-value by-reference mutable
- Generic Lambdas and Closures C++14
- std::function Type-erased Callables