ACHTUNG: THE CPDO WIKI IS NOW (AS OF 2011-May-17) MAINTAINED ON A DEDICATED WIKI SITE: http://whiki.wanderinghorse.net/wikis/cpdo/?page=cpdopp

As of 20110210, cpdo includes a C++ wrapper API. It is really easy to use...

#include "wh/cpdo/cpdo.hpp"

cpdo::driver * drv = new cpdo::driver("sqlite3:/path/to/db.sqlite3");
cpdo::stmt st( drv->prepare("SELECT * FROM t") );
// Note that cpdo::stmt is a std::auto_ptr-like convenience class
// for managing cpdo::statement pointer lifetime, and thus we
// use the '->' operator even though 'st' isn't a pointer...
while( st->step() ) {
   std::cout << st->get_int32(0) << '\n';
st.finalize(); // might not be necessary: see the API docs.
               // We use it here because the statement must be
               // finalized before we do this:
delete drv;

The main usage difference between the C and C++ APIs is that the C++ wrapper throws exceptions (cpdo::exception, which derives from std::exception) for the vast majority of error cases. See the API docs for the details and the small handful of functions which do not throw.