  A C++ software design is presented that can be used to interpolate data in
any number of dimensions. The design is based on a combination of templates of
functional collections of elements and so-called type lists. The design allows
for different search methodologies and interpolation techniques in each
dimension. It is also possible to expand and reduce the number of dimensions,
to interpolate composite data types and to produce on-the-fly additional values
such as derivatives of the interpolating function.
