Mike, I have another question.  Thanks all for patience on this, it has been much more learning for me than I'd naively realised. I've reached another point where internet research and trial and error has left me none the wiser.

Progress so far as of e4d3db3:

* The `SBCorrFunc` is now the `CorrelationFunction` at the C++ layer.  It inherits privately from `SBInterpolatedImage`.
* The `using SBInterpolatedImage::blahFunction(args)` construct in C++ doesn't seem to make Boost.Python aware of the member function in question when wrapping this now privately-inheriting class.  This probably isn't surprising.  So I've re-implemented a bunch of the member functions I think I will need to make them visible to Boost.Python.  A bit clunky, but didn't discover a better way.
* To make code duplication as small as possible, many of these are simply reimplemented simply as `return SBInterpolatedImage::blahFunction(args)`.  (So not really reimplemented at all - surely this redirection is exactly the set of commands for which the `using` statement is a convenient shorthand.) These are being successfully wrapped, giving sensible results in Python, and I've even got the doxygen working quite nicely in about as non-duplicative a way as I think possible.
* `xValue` and `kValue`, which I do re-implement (`kValue` maybe, it occurs to me now, unnecessarily; need to check back...) are also wrapped and seem to work in Python.

However, I'm getting linking errors with the `template` member functions `draw`, `drawK` and `drawShoot`, which I need.  Here I tried to do the same "reimplement as SBInterpolatedImage::draw()" trick, but I can't get it to link:
```
Undefined symbols for architecture x86_64:
  "double galsim::SBProfile::draw<int>(galsim::ImageView<int>, double, double) const", referenced from:
      double galsim::CorrelationFunction::draw<int>(galsim::ImageView<int>, double, double) const in CorrelatedNoise.os
  "double galsim::SBProfile::draw<short>(galsim::ImageView<short>, double, double) const", referenced from:
      double galsim::CorrelationFunction::draw<short>(galsim::ImageView<short>, double, double) const in CorrelatedNoise.os
  "void galsim::SBProfile::drawK<int>(galsim::ImageView<int>, galsim::ImageView<int>, double, double) const", referenced from:
      void galsim::CorrelationFunction::drawK<int>(galsim::ImageView<int>, galsim::ImageView<int>, double, double) const in CorrelatedNoise.os
  "void galsim::SBProfile::drawK<short>(galsim::ImageView<short>, galsim::ImageView<short>, double, double) const", referenced from:
      void galsim::CorrelationFunction::drawK<short>(galsim::ImageView<short>, galsim::ImageView<short>, double, double) const in CorrelatedNoise.os
  "double galsim::SBProfile::drawShoot<int>(galsim::ImageView<int>, double, galsim::UniformDeviate, double, double, bool) const", referenced from:
      double galsim::CorrelationFunction::drawShoot<int>(galsim::ImageView<int>, double, galsim::UniformDeviate, double, double, bool) const in CorrelatedNoise.os
  "double galsim::SBProfile::drawShoot<short>(galsim::ImageView<short>, double, galsim::UniformDeviate, double, double, bool) const", referenced from:
      double galsim::CorrelationFunction::drawShoot<short>(galsim::ImageView<short>, double, galsim::UniformDeviate, double, double, bool) const in CorrelatedNoise.os
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
scons: *** [lib/libgalsim.0.dylib] Error 1
scons: building terminated because of errors.
```
If I recomment all the template stuff in e4d3db3 and try to `scons` again, I still do get the same linking errors but they're raised only later when the `wrapTemplates` function is called in `pysrc/CorrelatedNoise.cpp`.

I would love it if I was doing something stupid and easy to fix, I think I'm otherwise almost there with this.

(Aside to @rmandelb : I figured out the pixel question I asked you, and the answer is no we definitely shouldn't include it! So no need to bother people with it.)