>>>>> Steinar Bang <s...@dod.no>: > What exactly is it you want to do? Have a thin C++ wrapper around C > objects, where the C objects "do the work"? Why do you want to? > Ie. what benefit do you expect to get, compared to just using the C > objects from inside your C++ code?
Another pattern that I've used with some success (eg. when wrapping the W3C libwww as HTTP/FTP/etc. support in a Qt application): - Create a C++ class that corresponds to the C API you would like to wrap - Where the C API would return a pointer to some struct, return a C++ object that holds a pointer to the struct and has methods corresponding to the operations that can be done on the struct using the API - Life cycle management would be handled by the API and the C++ object wrapping the API (though in some cases the wrapper object destructor might hand the C pointer back to the API) Variations over the theme: - The C++ wrappers have virtual methods - The API wrapping object return pointers to the C++ objects rather than instances (typically for objects with virtual methods) - The API wrapping object return smart pointers to the C++ objects (but as these instances will be pointer sized objects, this doesn't seem very useful...) The first trouble spot one will run into is non-primitive argument values and method return values. Eg. - Life cycle of returned wrapper objects - Strings - Minimize copies in and out of std::string - Minimize recodning from UTF-8-coded char* to UTF-16, or UCS-4 in std::wstring But they are overcomable.