I just wanted to follow up on the C++ side of OP email - Cython has quite a few difficulties working with C++ code at the moment. It's really more of a C solution most of the time and you must split things up into a mostly C call interface (that is the C code Cython can call) and limit exposure/complications with templates and complex C++11+ constructs. This may change in the longer term but in the near, that is the state.
I used to use Boost.Python but I'm getting my feet wet with Pybind (which is basically the same api but works more as you expect it to with it's signature/type plumbing (including std::shared_ptr islanding), with some other C++11 based improvements, and is header only + submodule friendly!). I also remembered ndarray thanks to Neal's post but I haven't figured out how to leverage it better than pybind, at the moment. I'd be interested to see ndarray gain support for pybind interoperability...