First Class Functions

Returning Function Pointers from Functions

How can I return a function pointer from a function in C++? What are some use cases for doing this?

Abstract art representing computer programming

You can return a function pointer from a function just like you would return any other pointer type. The syntax looks like this:

bool greater(int a, int b) { return a > b; }

bool (*GetComparator())(int, int) {  
  return greater;               
}

This function returns a pointer to a function that takes two int parameters, and returns a bool. The returned function checks if the first parameter is greater than the second.

Some use cases for returning function pointers include:

  1. Configuring behavior - Returning different function pointers based on configuration or environment allows flexibly changing functionality.
  2. Memoization - Capturing data in the closure of the returned function enables caching/memoization of expensive operations.
  3. Dependency injection - Caller can provide functions to be called by the callee, enabling inversion of control.

For example, a sorting function could allow specifying the comparison operation:

#include <algorithm>
#include <iostream>
#include <vector>

bool less(int a, int b) { return a < b; }
bool greater(int a, int b) { return a > b; }

bool (*GetComparator(bool asc))(int, int) {  
  return asc ? less : greater;               
}

int main() {
  std::vector<int> v{5, 2, 3, 4, 1};

  std::sort(
    v.begin(), v.end(), GetComparator(true));

  for (int i : v) {
    std::cout << i << ' ';
  }
}
1 2 3 4 5
This Question is from the Lesson:

First Class Functions

Learn about first-class functions in C++: a feature that lets you store functions in variables, pass them to other functions, and return them, opening up new design possibilities

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

First Class Functions

Learn about first-class functions in C++: a feature that lets you store functions in variables, pass them to other functions, and return them, opening up new design possibilities

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 124 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved