A Framework For Higher-Order Functions In C++
Konstantin Laufer
Loyola University of Chicago
laufer@math.luc.edu
Abstract
C and C++ allow passing functions as arguments to other functions in
the form of function pointers. However, since function pointers can
refer only to existing functions declared at global or file scope,
these function arguments cannot capture local environments. This leads
to the common misconception that C and C++ do not support function
closures.
In fact, function closures can be modeled directly in C++ by enclosing
a function inside an object such that the local environment is
captured by data members of the object. This idiom is described in
advanced C++ texts and is used, for example, to implement callbacks.
The purpose of this paper is twofold: First, we demonstrate how this
idiom can be generalized to a type-safe framework of C++ class
templates for higher-order functions that support composition and
partial application. Second, we explore the expressiveness of the
framework and compare it with that of existing functional programming
languages.
We illustrate by means of various examples that object-oriented and
functional idioms can coexist productively and can be used to enhance
the functionality of common classes, for example, of nonlinear
collections such as trees. A C++ implementation of the framework is
available on request.
Download the full text of this paper in
ASCII (54,373 bytes) and
POSTSCRIPT (187,700 bytes) form.
To Become a USENIX Member, please see our
Membership Information.