Chapter 8. Wrapping C++ Libraries with Cython
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
— B. Stroustrup
Using Cython to wrap C++ has much in common with using it to wrap C: we must declare the C or C++ interface we want to wrap in an extern
block; we must define Python-accessible functions and extension types that wrap
the library; and we must convert Python types to and from C or C++
types when Cython cannot apply automatic conversions.
But C++ is a much larger and more complex language than C. To deal with this added complexity and the additional language constructs, Cython has C++-specific syntax to help.
In this chapter, we will cover all of Cython’s C++ wrapping features. Using them, we will learn how to wrap most C++ constructs in Python.
To get an overview, let’s wrap a simple C++ class from end to end.
Simple Example: MT_RNG Class
To extend our example in Chapter 7, suppose we reimplement our random-number generator in a simple C++ class with the following interface:[14]
namespacemtrandom{conststaticunsignedintN=624;classMT_RNG{public:MT_RNG();MT_RNG(unsignedlongs);MT_RNG(unsignedlonginit_key[],intkey_length);// initializes RNG state, called by constructorsvoidinit_genrand(unsignedlongs);// generates a random number on [0,0xffffffff]-intervalunsignedlonggenrand_int32();// generates a random number on [0,1]-real-intervaldoublegenrand_real1();private:unsignedlongmt[N];intmti;};// class ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access