Calling C++ functions – Caveat
When you write a code to call in a C++ function from C, you need to wrap the prototypes in the following:
extern "C" { … }
This allows you to call C++ prototypes because C won't understand a C++ class. With Cython, if you are telling your C output to call in C++ functions, you need to be careful about which compiler you are using or you need to write a new header to implement the minimal wrapper functions required to make the C++ calls.
Namespaces – Caveat
Cython seems to generally require a namespace to keep things nested, which you are already probably doing in your C++ code. Making PXD on non-namespaced code seems to make new declarations, meaning that you will get linking errors due to multiple symbols. The C++ support looks really good from these templates, and more metaprogramming idioms can be difficult to express in Cython. When polymorphism comes into play, it can be difficult to track down compilation errors. I would stress that you should keep your interfaces...