Object-Oriented Programming

Callbacks

Michael L. Collard, Ph.D.

Department of Computer Science, The University of Akron

Generalizing a Sort

C++ Library Equivalents

Common Control Flow

Callback

  • A callback is a bit of computation from the caller that the called function or callee function can use whenever they need to in the implemented algorithm
  • Callbacks permit customization of the computation in a function/method without changing the code in the computation
  • Not a new programming mechanism

Control Flow Comparison

Callback Arguments

  • free functions, function pointers
  • lambda functions, anonymous functions
  • functors, class that acts like a function
  • methods, pointers to member functions

Example: Directory Traversal Iterator

Example: Directory Traversal Iterator

  • Assume that Directory provides an iterator similar to std::vector
  • The client has to know how to use the iterator
  • Client calls Directory methods
  • Directory methods do not call the client
  • Have to know the methods available from the Directory

Example: Directory Traversal Callback

Example: Directory Traversal Callback

  • Only one call to traverse the directory
  • Client calls traverse()
  • The method traverse() calls the client's output()
  • The callback is provided the filename via a parameter that the traverse() calls each pass
  • The whole process repeats until the directory is completely traversed

Example: Directory Traversal Callback

  • Only the parameters, e.g., value, are available to the callback
  • Each call to traverse() can use a different callback
  • Very useful when processing is quite complex, and it may be inefficient to save state and return each step
  • The name of the callback, process(), is typically general as we don't know what it will be used for
  • Processing of a directory is much more complex than this

Example: Process File

Callbacks

  • Can be used with any level of complex processing
  • Details of processing hidden inside the callback-enabled processor
  • Client only has to provide the code to run when a particular event occurs
  • Essential for asynchronous processing